알고리즘 공부

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

철매존 2021. 10. 27. 20:01
728x90

문제 설명

1. 스코빌 지수, K가 주어진다.

2. 가장 작은 스코빌 지수부터 (최소값+2*최소다음값) 으로 더 큰 값을 만들 수 있다.

3. 스코빌 지수가 모두 K보다 크게 만드는 방법을 return하면 된다. 불가능하면 -1을 return한다.

풀이 과정

 1. level2 문제라고는 생각도 들지 않을정도로 간단한 우선순위 큐 문제이다.

 2. 우선순위 큐를 사용하면 작은 수부터 오름차순으로 배열된다.

 3. 스코빌 지수를 작은 순서부터 꺼내가면서 더해줘서 구하면 된다.

 4. 참고로 아무리 구해도 구할 수 없는 경우가 생기는데, 우선순위 큐의 크기가 1이 되면 구할 수 없는 것이므로 나가면 된다.

1) 맨 위 + 다음맨위*2 를 더해서 우선순위 큐에 넣는다.

2) 이걸 while이 K보다 작은 동안 계속 반복하면 된다.

3) 4에서 이야기했듯, 구하지 못하는 경우를 생각하면 size가 1이 되면 while문을 탈출한다.

4) size가 1이어서 탈출하는 경우는 pq.peek가 K보다 작은 수가 될 것이다. 이 때 -1을 return하도록 하면 된다.

 

워낙 간단한 문제라 따로 설명할 내용은 없을 듯 하다 

코드