헝D의 일기장

https://school.programmers.co.kr/learn/courses/30/lessons/142085

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의풀이

import java.util.*;
class Solution {
    public int solution(int n, int k, int[] enemy) {
        //n:병사
        //k:무적권
        //enemy: 매 라운드별 적의 수 
        int answer = 0;
        PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());//최대힙
        for(int e: enemy){
            if(n >= e){//막을수 있는경우
                n-=e;
                answer++;
                q.add(e);
            }else{//막을 병사가 없는경우
                if(k>0){//무적권이 있으면 무적권 사용
                    k--;
                    if(q.peek() != null){
                        if(q.peek()>=e){
                            n+=q.poll() ; //지나온 라운드중 가장 많은 적이 있을때 사용. 
                            n-=e;
                            q.add(e);
                        }
                    }
                    answer++;         
                }else{//무적권이 없으면 끝
                    break;
                }
            }
        }
        return answer;
    }
}
profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!