Devtraces
개발자취
Devtraces
전체 방문자
오늘
어제
  • 분류 전체보기
    • Baekjoon
    • Programmers

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dfs
  • greedy
  • sort
  • binary search
  • floyd-warshall
  • Queue
  • stack
  • java
  • BFS
  • DP
  • level3
  • 그리디 알고리즘
  • Dijkstra
  • map
  • Tree
  • recursive
  • Kakao
  • Set
  • level2
  • union-find
  • prime number
  • math
  • Trie
  • 백준
  • programmers
  • PriorityQueue
  • Matrix
  • GCD
  • two pointer
  • level4

최근 댓글

최근 글

티스토리

Devtraces
Programmers

[프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)

[프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)
Programmers

[프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)

2022. 12. 14. 02:17

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42626

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

코딩테스트 연습 > 힙(Heap) > 더 맵게

 

 

문제 설명

 

 

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

 

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

 

Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.

 

 

 

 

제한 사항
  • scoville의 길이는 2 이상 1,000,000 이하입니다.
  • K는 0 이상 1,000,000,000 이하입니다.
  • scoville의 원소는 각각 0 이상 1,000,000 이하입니다.
  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.

 

 

입출력 예
scoville K return
[1, 2, 3, 9, 10, 12] 7 2

 

 

입출력 예 설명
 
  1. 스코빌 지수가 1인 음식과 2인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 1 + (2 * 2) = 5
    가진 음식의 스코빌 지수 = [5, 3, 9, 10, 12]
  2. 스코빌 지수가 3인 음식과 5인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 3 + (5 * 2) = 13
    가진 음식의 스코빌 지수 = [13, 9, 10, 12]

 

모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.

 

 

 

 

 

 

나의 코드

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for(int s : scoville)  
            pq.add(s);
        
        while(pq.peek() < K) {
            if(pq.size() == 1) 
                return -1;
            
            int mix = pq.poll() + pq.poll() * 2;
            pq.add(mix);
            answer++;
        }
        
        return answer;
    }
}

 

풀이

  1. 우선순위큐를 이용하면 쉽게 풀 수 있는 문제이다.
  2. 오름차순 정렬인 우선순위큐를 생성하고 scoville 배열의 수를 전부 담는다.
  3. 우선순위큐의 제일 작은 수인 제일 앞에 있는 수를 확인하여 K 이상이면 종료하는 while문을 만든다.
  4. 혹 섞다가 음식이 한 개가 되었을 때도 K보다 작다면 -1을 return 한다.
  5. 문제에 나온 조건대로 음식을 섞고 다시 넣어주면 자동으로 오름차순 정렬 되기 때문에 제일 처음 것을 다시 확인하면 되는 것이다.
  6. 음식 섞을 때마다 answer를 증가시켜준다.

 

 

 

 

 

'Programmers' 카테고리의 다른 글

[프로그래머스 Level.2] [1차] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] n^2 배열 자르기 (월간 코드 챌린지 시즌3) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] 피로도 (완전탐색) (Java)  (0) 2022.12.13
[프로그래머스 Level.2] 스킬트리 (Summer/Winter Coding(~2018)) (Java)  (0) 2022.12.13
  • 문제 링크
  • 코딩테스트 연습 > 힙(Heap) > 더 맵게
  • 풀이
'Programmers' 카테고리의 다른 글
  • [프로그래머스 Level.2] [1차] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) (Java)
  • [프로그래머스 Level.2] n^2 배열 자르기 (월간 코드 챌린지 시즌3) (Java)
  • [프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)
  • [프로그래머스 Level.2] 피로도 (완전탐색) (Java)
Devtraces
Devtraces

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.