[java] 프로그래머스 - 더맵게
업데이트:
문제
프로그래머스-더맵게
K 이하의 수 2개를 연산해 나가면서 연산횟수를 출력하는 문제.
풀이
우선순위 큐를 사용해서 K이하인 수 2개씩 뽑아 연산을 하면 되는 문제다.
초반에는 효율성을 내자 !! 에 사로잡혀서 이것저것 시도했지만.. 폭망했다.
효율성을 챙기기 전에 기본부터 챙기는 걸로 ..^^
K이상 되는 수가 뽑혔다면 더이상 연산 할 필요가 없으므로 종료
소스코드
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Long> pq = new PriorityQueue<>();
for (int i : scoville) {
pq.add((long) i);
}
while (!pq.isEmpty()) {
long first = pq.poll();
if(first>=K) {
break;
}
if (pq.size() == 0) {
if (first < K) {
return -1;
} else {
return answer;
}
}
long second = pq.poll();
long t = first + (second * 2);
answer++;
pq.add(t);
}
return answer;
}
}
다른사람의 코드
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> q = new PriorityQueue<>();
for(int i = 0; i < scoville.length; i++)
q.add(scoville[i]);
int count = 0;
while(q.size() > 1 && q.peek() < K){
int weakHot = q.poll();
int secondWeakHot = q.poll();
int mixHot = weakHot + (secondWeakHot * 2);
q.add(mixHot);
count++;
}
if(q.size() <= 1 && q.peek() < K)
count = -1;
return count;
}
}
댓글남기기