[프로그래머스] 더 맵게 (Java, Heap, lv2)알고리즘/자료구조2024. 7. 19. 11:35
Table of Contents
반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/42626
문제 풀이
모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 스코빌 지수 가장 적은 두 가지 음식을 섞어 새로운 음식을 만든다
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
- K 이상 음식을 만들 수 있는 최소 턴 수 (만약 모두 섞었는데 못 구하는 경우 -1 리턴)
- 우선 순위 큐, PriorityQueue 사용 (오름차순) , 시간 복잡도 O(NlogN) 이때 N은 스코빌 지수 배열 크기
- scoville 배열의 길이는 2 ~ 1,000,000
요약
while 루프를 돌면서 카운트를 증가 시킨다
- 큐의 크기가 2 미만인 경우 더 이상 음식을 만들 수 없으므로 -1을 반환한다
- 큐의 peek() 값이 K 이상이면 정상 종료한다
- 이외 주어진 공식에 따라 신규 음식을 큐에 추가하여 반복문을 수행한다
전체 코드
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
Queue<Integer> que = new PriorityQueue<>(); // 오름차순
for(int s : scoville) {
que.add(s);
}
int answer = 0;
while(true) {
if(que.peek() >= K) break; // peek 값이 K이상이면 나머지도 K이상 만족
if(que.size() < 2) return -1; // 음식이 하나면 더 이상 섞을 수 없다
answer += 1;
int v1 = que.poll();
int v2 = que.poll();
int next = v1 + (2 * v2);
que.add(next);
}
return answer;
}
}
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
[프로그래머스] 디스크 컨트롤러 (Java, Heap, lv3) (0) | 2024.07.19 |
---|---|
[프로그래머스] 주식 가격 (Java, lv2) (0) | 2024.07.17 |
[BOJ21942] 부품 대여장 (자료구조, 해시맵) (0) | 2024.05.14 |
[Java] TreeSet 주요 메소드 살펴보기 (0) | 2024.05.08 |
[Java] PriorityQueue(우선 순위 큐) 분석하고, 따라 구현해보기 (0) | 2024.02.12 |
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!