더 맵게

2022. 6. 23. 13:44·코딩테스트/프로그래머스
반응형

문제 링크는 아래와 같습니다.

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

최근에 유튜브에서 재밌으면서 유익한 영상을 보게 되었습니다.

https://youtu.be/PFKPdjdWbQ8

원래도 입력 값의 범위가 중요하다고 생각했으나,

이 영상을 본 기점으로 더더더 입력 값의 범위를 꼼꼼하게 체크하게 되었다ㅋㅋ

처음 문제를 봤을 때는 느낀점은 '입력 값이 너무 큰데..?!'였다.

절대로 이중 반복문을 사용하면 안된다고 생각했다. 

그러면서 고민한 부분이 있었다. '그러면 정렬은 어떻게 해야하지..?'

그래서 자바에서 우선순위 큐에 대한 자료구조를 찾아보게 되었고,

PriorityQueue 자료구조가 우선순위 큐와 같이 동작한다는 것을 배웠다.

 

그래서 PriorityQueue를 사용해 문제를 손쉽게 해결할 수 있었다.

아래는 PriorityQueue의 짧은 사용예시다.

//값이 낮은 것이 우선 순위가 높다.
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
//값이 높은 것이 우선 순위가 높다.
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

 

역시 문제 해결을 위한 자료 구조 선택이 중요하다는 것을 다시금 깨달았으며, 많은 것을 배운 문제였다.

정답 코드는 아래와 같다.

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> queue = new PriorityQueue<>();

        for (int i : scoville) {
            queue.add(i);
        }

        while(true){
            if(queue.peek() < K){
                int min = queue.poll();
                if(queue.peek() == null){
                    answer = -1;
                    break;
                }
                int nextMin = queue.poll();
                queue.add(min + (nextMin * 2));
                answer++;
            }
            else break;
        }
        return answer;
    }
}

 

이상으로 포스팅을 마칩니다. 감사합니다.

반응형
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • 가장 큰 수
  • 실패율
  • [1차] 다트 게임
  • 신고 결과 받기
Debin
Debin
공부 기록을 남기며 게시글 리팩토링을 진행하는 블로그입니다.
  • Debin
    리팩토링하는 블로그
    Debin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • DB
        • DB 기초
        • MySQL
        • SQL 튜닝
      • OS
      • Network
      • Git
      • 디지털콘텐츠기획
      • 소프트웨어공학
      • 코딩테스트
        • 프로그래머스
        • 백준
        • 인프런
      • 공부 일지
      • 독서
        • 클린코드
        • 일상 속 사물이 알려주는 웹 API 디자인
        • 토비의 스프링
        • 객체지향의 사실과 오해
        • 자바 잘 읽는 법
      • 기록 및 회고
      • Cloud
        • AWS
      • 개발
        • Java
        • Spring Core
        • Spring MVC
        • Spring DB
        • Spring Boot
        • Spring Security
        • Spring Batch
        • JPA
        • Test
        • Android
      • 대외활동
        • UMC SERVER
        • 카엔프 SW 아카데미
      • 프로젝트
      • Docker
      • Gradle
      • ELK
      • 실무 이야기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

    • 본인 깃허브입니다!
  • 인기 글

  • 태그

    Java
    spring
    도커
    인덱스
    mysql
    spring boot
    AOP
    코딩 #개발자 #노마드북클럽 #노개북
    토비의 스프링
    리눅스
    객체
    프록시
    test
    innodb
    스프링 부트
    docker
    트랜잭션
    운영체제
    ORM
    container
    spring mvc
    객체지향
    redis
    자바
    스프링
    JPA
    데이터베이스
    SQL
    컨테이너
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Debin
더 맵게
상단으로

티스토리툴바