Notice
Recent Posts
Recent Comments
Link
마이의 개발 블로그
[프로그래머스] 더 맵게 (Java) 본문
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
길이가 길고 주어진 숫자가 큰데 반해 뽑아서 사용해야하는 숫자는 가장 작은 두 개였기 때문에 효율적인 정렬을 위해 우선순위 큐(PriorityQueue)를 사용해서 문제를 해결했다.
- scoville 배열을 우선순위 큐에 삽입
- (최소 스코빌 지수가 K보다 작으면서 2개 이상 스코빌지수가 남아있는 동안 반복하여) 가장 작은 두 수를 추출하여 혼합 후 다시 큐에 삽입
- 반복문 종료 후에도 최소 스코빌 지수가 K보다 작으면 실패, 아니면 성공
Note
- 처음에 트리맵을 떠올렸는데, 둘을 비교해서 찾아보니 트리맵은 최대값과 최소값을 동시에 구해야 하거나 특정 키값을 기준으로 탐색이 필요한 경우에 사용하는 것이 좀 더 적합하다는 걸 알게되었다. 그리고 우선순위 큐는 느슨한 정렬인 상태로 정렬된 상태에서의 전체 탐색은 불가능하다. 나중에 비교해서 정리해보는 것도 좋을 것 같다.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> queue = new PriorityQueue<>();
for(int i : scoville){
queue.add(i);
}
while(queue.peek() < K && queue.size() >= 2){
queue.add(queue.poll() + queue.poll() * 2);
answer++;
}
if(queue.peek() < K){
answer = -1;
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 둘만의 암호 (Java) (0) | 2023.02.04 |
---|---|
[프로그래머스] 할인 행사 (Java) (0) | 2023.02.04 |
[프로그래머스] 스킬트리 (Java) (0) | 2023.02.02 |
[프로그래머스] 괄호 회전하기 (Java) - 간단한 버전 (0) | 2023.02.01 |
[프로그래머스] 오픈채팅방 (Java) (0) | 2023.01.29 |
Comments