[java] 프로그래머스 - 더맵게

1 분 소요

업데이트:

문제

프로그래머스-더맵게
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;
    }
}

댓글남기기