코딩테스트 문제를 풀어보았습니다.
문제는 아래와 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같��
programmers.co.kr
이 문제의 경우 우선순위큐를 이용하면 쉽게 풀 수 있습니다.
저의 경우 자바에 있는 comparable과 prPriorityQueue를 이용하여 풀어보았습니다
아래는 코드입니다.
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
//우선순위큐 생성
PriorityQueue<Scoville> pque=new PriorityQueue<Scoville>();
//우선순위큐에 값 넣어주기
for(int level:scoville) {
pque.add(new Scoville(level));
}
//중요로직
while( pque.peek().getLevel() <= K && pque.size() >=2) {
Scoville first = pque.poll();
Scoville second = pque.poll();
int newFirst = first.getLevel() +(second.getLevel() * 2);
pque.add(new Scoville(newFirst));
answer++;
}
//만약 K이상으로 만들수 없다면 -1 리턴
if(pque.peek().getLevel() <=K)
return -1;
return answer;
}
}
//우선순위큐에 사용하기 위한 클래스
class Scoville implements Comparable<Scoville>{
private int level;
public Scoville(int level) {
this.level = level;
}
public void setLevel(int level) {
this.level = level;
}
public int getLevel() {
return this.level;
}
@Override
public int compareTo(Scoville o) {
if(this.level > o.level)
return 1;
else
return -1;
}
}
이상입니다