송민준의 개발노트

[프로그래머스] 더 맵게 본문

알고리즘/프로그래머스

[프로그래머스] 더 맵게

송민준 2022. 4. 25. 00:35

https://programmers.co.kr/learn/courses/30/lessons/42626?language=java 

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

힙을 활용한 문제 접근 필요

우선순위 큐 사용하였음.

public int solution(int[] scoville, int K) {
        int returnValue = 0;
        
        // 우선순위 큐 선언
        Queue<Integer> queue = new PriorityQueue<>();
        
        // int 형태를 Integer로 전환(람다를 만약 쓴다면...)
        //List<Integer> convertArray = Arrays.stream(scoville).boxed().collect(Collectors.toList());
        //queue.addAll(convertArray);
        
        // int 형태를 Integer로 전환(람다 안쓰면 효율성 개선됨)
        for(int i = 0; i < scoville.length; i++) {
            queue.add(scoville[i]);
        }
        
        // 큐에 값이 있을 동안 값을 뽑아냄
        while(!queue.isEmpty()) {
            int firstValue = queue.poll();
            if(firstValue < K) {
                int secondValue = queue.poll();
                int mixValue = firstValue + (secondValue * 2);
                
                // 조합한 값이 K보다 작은데 다음값이 없을 경우 -1 반환
                if(mixValue < K && queue.isEmpty()) {
                    queue.clear();
                    returnValue = -1;
                } else { // 그게 아닐 경우 믹스값 더해줌
                    queue.add(mixValue);
                    returnValue++;
                }
            } else {
                queue.clear();
            }
        }
        return returnValue;
    }

람다로 queue에 담을 경우

 

heap 참고링크

https://shanepark.tistory.com/261

 

JAVA로 알아보는 힙 (Heap) 자료구조

Heap Heap은 최소값 및 최대값을 최대한 빠르게 찾아내기 위해 특별히 고안된 자료 구조 입니다. 완전 이진트리(마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 트리의 형태)를 기본으로

shanepark.tistory.com

https://st-lab.tistory.com/225

 

자바 [JAVA] - 힙 정렬 (Heap Sort)

[정렬 알고리즘 모음] 더보기 1. 계수 정렬 (Counting Sort) 2. 선택 정렬 (Selection Sort) 3. 삽입 정렬 (Insertion Sort) 4. 거품 정렬 (Bubble Sort) 5. 셸 정렬 (Shell Sort) 6. 힙 정렬 (Heap Sort) - [현재..

st-lab.tistory.com