일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- java
- kotlin
- git
- 토비의 스프링
- AOP
- aws
- QueryDSL
- redis
- Airflow
- build_test
- rds
- Spring
- workflow
- string
- JUnit
- template
- immutable
- mutable
- db
- compiler
- EC2
- CodeDeploy
- Github
- 사이드 프로젝트
- 알고리즘
- springboot
- Action
- JPA
- Today
- Total
개발 일기
프로그래머스 레벨2 더 맵게 (JAVA) 본문
더 이상은 못풀줄 알았던 레벨2가 하다 보니 풀리게 되는데.. 신기하다
이번에 푼 문제는
https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
더 맵게 이다
이 문제를 풀면서 Queue구조지만
우선순위가 존재해서 우선순위별로 정렬이 되는 Queue 구조인
Priority Queue에 대해 알게 되었다.
이 문제의 핵심은
가장 작은 수 + 그다음으로 작은 수 * 2 를 하여 K를 만드는 거다
배열에 있는 모든 수를 저 공식으로 K까지 만드는 횟수를 구하는 거다
Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
라는 조건 때문에 Priority Queue를 사용하면 문제를 쉽게 풀 수 있다.
모든 코드는 GitHub 에 올려놓았다.
코드는 이러하다..
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (Integer integer : scoville) {
queue.add(integer);
}
while (true) {
if(queue.size() == 1 && queue.peek() < K) {
return -1;
}
if (queue.peek() >= K) {
return answer;
}
int n = queue.poll() + (queue.poll() * 2);
queue.add(n);
answer++;
}
}
}
queue의 size 가 1이고 그 값이 K보다 작다면 이건 만들 수 없다
return -1 해준다
Priority Queue는 정렬이 된다.
그럼 가장 낮은 수부터 앞으로 가게 되고 Queue는 앞에서부터 값이 나온다
queue의 첫 번째 값이 K보다 크다면 그 뒤에 값은 전부 K보다 큰 값이다
그럼 answer 값을 return 시켜준다
저 조건에 안 맞는다면 공식을 진행해준다.
공식대로 만든 값을 queue에 다시 넣어주고 정렬이 됨으로써
다음 while에서는 가장 작은 값부터 공식을 진행할 수 있게 된다.
후기
이제 진짜.. 2레벨 더 풀 수 있는게 없는거 같은데..!
'알고리즘 > programmers' 카테고리의 다른 글
프로그래머스 레벨3 네트워크 (JAVA) (DFS,BFS) (0) | 2021.07.18 |
---|---|
프로그래머스 레벨2 숫자의 표현 (JAVA) (0) | 2021.07.16 |
프로그래머스 레벨2 124 나라의 숫자 (JAVA) (0) | 2021.07.13 |
프로그래머스 레벨2 전화번호 목록 (JAVA) (0) | 2021.07.11 |
프로그래머스 레벨2 튜플 (JAVA) (0) | 2021.07.11 |