
문제📜
https://programmers.co.kr/learn/courses/30/lessons/42626
나의 생각의 흐름💡
1) 스코빌 지수를 작은 순으로 정렬하자.
2) 사용한 스코빌 지수는 없어져야 하므로 queue나 stack을 사용하자
3) 모든 음식의 스코빌 지수가 K보다 크다면 카운트한 수를 보낸다.
- 섞으려면 2개 이상의 음식이 필요
- 음식의 스코빌 지수가 K보다 작을 때에만 실행
4) 마지막 남은 스코빌 지수가 K보다 작다면 -1을 보낸다.
나의 풀이🔑
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
//스코빌 지수가 작은 순으로 정렬
Arrays.sort(scoville);
//사용한 스코빌지수는 사라져야한다-> queue 사용
PriorityQueue<Integer> sco = new PriorityQueue<>();
for(int i = 0; i<scoville.length; i++){
sco.offer(scoville[i]);
}
//섞는 횟수를 카운트
int cnt = 0;
//섞은 스코빌 지수
int chk = 0;
//모든 스코빌 지수를 K이상으로 만들어야 한다.
//섞으려면 2개 이상의 스코빌 지수가 필요
//가장 작은 스코빌 지수가 K보다 크면 종료
while(sco.size()!=1&&sco.peek()<K){
chk = (int)sco.poll()+2*(int)sco.poll();
sco.offer(chk);
cnt++;
}
//가장 맵지 않은 음식의 스코빌 지수
//두 번째로 맵지 않은 음식의 스코빌 지수 * 2
if(sco.peek()<K){
cnt=-1;
}
return cnt;
}
}후기✍
queue를 사용한게 포인트였다.
조건을 잘 따지지 않았다면 시간이 초과 되었을 거 같다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][LV.1] 완주하지 못한 선수 (0) | 2022.04.27 |
|---|---|
| [프로그래머스][LV.1] 로또의 최고 순위와 최저 순위 (0) | 2022.04.27 |
댓글