본문 바로가기
Algorithm/프로그래머스

[프로그래머스][LV.2] 더 맵게

by 홍홍_ 2022. 4. 29.

문제📜

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

댓글