코딩 테스트/Level 2
14. 더 맵게
컴닥
2020. 7. 28. 14:32
반응형
https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같��
programmers.co.kr
파이썬
def solution(scoville, K):
from heapq import heappop, heapify, heappush
heapify(scoville)
answer = 0
while len(scoville) > 1 and scoville[0] < K:
heappush(scoville, heappop(scoville) + heappop(scoville) * 2)
answer += 1
return -1 if (scoville[0] < K) else answer
'''
테스트 1 〉 통과 (178.47ms, 118MB)
테스트 2 〉 통과 (409.91ms, 215MB)
테스트 3 〉 통과 (1916.74ms, 707MB)
테스트 4 〉 통과 (135.43ms, 95.9MB)
테스트 5 〉 통과 (2197.61ms, 740MB)
'''
파이썬은 임포트문을 함수내에서도 쓸 수 있습니다.
파이썬의 heapq 모듈을 사용했습니다.
제 블로그에서도 소개한 적 있죠.
https://comdoc.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%98-heapq-%EB%AA%A8%EB%93%88
자바
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> scoQ = new PriorityQueue<>();
for (int each : scoville) {
scoQ.add(each);
}
int answer = 0;
while (scoQ.size() > 1 && scoQ.peek() < K) {
scoQ.add(scoQ.poll() + scoQ.poll() * 2);
answer++;
}
return (scoQ.peek() < K) ? -1 : answer;
}
}
/*
테스트 1 〉 통과 (169.09ms, 70.3MB)
테스트 2 〉 통과 (270.52ms, 81.8MB)
테스트 3 〉 통과 (1152.23ms, 137MB)
테스트 4 〉 통과 (120.58ms, 68.3MB)
테스트 5 〉 통과 (1387.60ms, 141MB)
*/
인라인으로 변환하기 위해 스트림까지 동원했으나.. 깔끔하지 않아서..
import java.util.PriorityQueue;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> scoQ = new PriorityQueue<>(
IntStream.of(scoville).boxed().collect(Collectors.toList())
);
int answer = 0;
while (scoQ.size() > 1 && scoQ.peek() < K) {
scoQ.add(scoQ.poll() + scoQ.poll() * 2);
answer++;
}
return (scoQ.peek() < K) ? -1 : answer;
}
}
/*
테스트 1 〉 통과 (162.77ms, 71.6MB)
테스트 2 〉 통과 (274.72ms, 86.8MB)
테스트 3 〉 통과 (1394.17ms, 145MB)
테스트 4 〉 통과 (142.63ms, 67.2MB)
테스트 5 〉 통과 (1415.91ms, 149MB)
*/
반응형