카테고리 없음

코딩테스트 - 더 맵게

중랑구보안관 2020. 8. 7. 09:21

코딩테스트 문제를 풀어보았습니다.

문제는 아래와 같습니다.

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;
	}
	
}

 

이상입니다