본문 바로가기
Algorithm/Programmers

[Programmers/Lv2] 더 맵게

by 광진구뚝배기 2021. 10. 5.

알고리즘 문제 풀이 / 프로그래머스 (programmers)  - 더 맵게

 

 

 

문제 링크

 

https://programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

 

 

문제 풀이

 

'우선순위 큐' 를 이용한다.

K이상이 안된다면 -1을 아니면 answer을 출력한다.

 

 

이 문제를 보자마자 queue로 풀면 좋겠다는 생각을 했다. 우선순위 큐로 푼다면 poll() 할 때 마다 제일 작은 스코빌 지수가 나올테니 그렇게 꺼낸 값을 계산해서 다시 queue에 넣어주면 된다. 그래서 제일 작은 값이 K이상이거나 스코빌을 모두 섞어도 안되면 while 문을 빠져나오면 되는 간단한 문제였다.

 

public static int solution(int[] scoville, int K) {
	int answer = 0;
	PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
	for(int sco : scoville) {
		queue.add(sco);
	}

	int reSco = 0;
	while(queue.peek() < K && queue.size() > 1) {
		reSco = queue.poll() + queue.poll() * 2;
		queue.add(reSco);
		answer++;
	}
		
	answer = queue.peek() < K ? -1 : answer;
	return answer;
}
반응형

댓글