본문 바로가기

코테

[프로그래머스] <더 맵게> 파이썬

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

from collections import deque
def solution(scovilles, K):
    answer = 0
    while True :
        scovilles.sort()
        scoville = deque(scovilles)
        if scoville[0] >= K : return answer 
        a, b = scoville.popleft(), scoville.popleft()
        scoville.append(a+b*2)
        scovilles = list(scoville)
        answer+=1
        
    

정확성 테스트

테스트 1 실패 (런타임 에러)
테스트 2 통과 (0.01ms, 10.2MB)
테스트 3 실패 (런타임 에러)
테스트 4 통과 (0.01ms, 10.2MB)
테스트 5 통과 (0.01ms, 10.2MB)
테스트 6 통과 (2.92ms, 10.2MB)
테스트 7 통과 (2.38ms, 10.2MB)
테스트 8 실패 (런타임 에러)
테스트 9 통과 (0.12ms, 10.1MB)
테스트 10 통과 (2.00ms, 10.2MB)
테스트 11 통과 (0.74ms, 10.2MB)
테스트 12 통과 (6.45ms, 10.2MB)
테스트 13 통과 (2.71ms, 10.2MB)
테스트 14 실패 (런타임 에러)
테스트 15 통과 (3.98ms, 10.1MB)
테스트 16 통과 (0.01ms, 10.3MB)

효율성 테스트

테스트 1 실패 (시간 초과)
테스트 2 실패 (시간 초과)
테스트 3 실패 (시간 초과)
테스트 4 실패 (시간 초과)
테스트 5 실패 (시간 초과)

채점 결과

정확성: 57.1

효율성: 0.0

합계: 57.1 / 100.0

 

바로 heapq 사용

정확성은 똑같이 틀렸지만, 효율성은 다 통과

import heapq
def solution(scovilles, K):
    heapq.heapify(scovilles)
    answer = 0
    while True :
        if scovilles[0] >= K : return answer
        a,b = heapq.heappop(scovilles), heapq.heappop(scovilles)
        heapq.heappush(scovilles, a+b*2)
        answer += 1
        
    

정확성 테스트

테스트 1 실패 (런타임 에러)
테스트 2 통과 (0.01ms, 10.2MB)
테스트 3 실패 (런타임 에러)
테스트 4 통과 (0.01ms, 10.2MB)
테스트 5 통과 (0.01ms, 10.2MB)
테스트 6 통과 (0.68ms, 10MB)
테스트 7 통과 (0.57ms, 10.2MB)
테스트 8 실패 (런타임 에러)
테스트 9 통과 (0.06ms, 10.2MB)
테스트 10 통과 (0.51ms, 10.2MB)
테스트 11 통과 (0.24ms, 10.2MB)
테스트 12 통과 (1.17ms, 10.1MB)
테스트 13 통과 (0.55ms, 10.2MB)
테스트 14 실패 (런타임 에러)
테스트 15 통과 (0.89ms, 10.2MB)
테스트 16 통과 (0.01ms, 10.2MB)

효율성 테스트

테스트 1 통과 (181.44ms, 16.2MB)
테스트 2 통과 (366.70ms, 21.9MB)
테스트 3 통과 (1889.12ms, 49.7MB)
테스트 4 통과 (136.85ms, 14.9MB)
테스트 5 통과 (1910.40ms, 51.8MB)

채점 결과

정확성: 57.1

효율성: 23.8

합계: 81.0 / 100.0

 

  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.

이걸 안 봄

import heapq
def solution(scovilles, K):
    heapq.heapify(scovilles)
    answer = 0
    while True :
        if scovilles[0] >= K : return answer
        if len(scovilles) < 2 : return -1
        a,b = heapq.heappop(scovilles), heapq.heappop(scovilles)
        heapq.heappush(scovilles, a+b*2)
        answer += 1

정확성 테스트

테스트 1 통과 (0.01ms, 10.2MB)
테스트 2 통과 (0.01ms, 10.3MB)
테스트 3 통과 (0.01ms, 10.2MB)
테스트 4 통과 (0.01ms, 10.2MB)
테스트 5 통과 (0.01ms, 10.2MB)
테스트 6 통과 (0.79ms, 10.1MB)
테스트 7 통과 (0.71ms, 10.2MB)
테스트 8 통과 (0.08ms, 10.2MB)
테스트 9 통과 (0.07ms, 10.2MB)
테스트 10 통과 (0.52ms, 10.3MB)
테스트 11 통과 (0.31ms, 10.2MB)
테스트 12 통과 (1.06ms, 10.1MB)
테스트 13 통과 (0.65ms, 10.2MB)
테스트 14 통과 (0.02ms, 10.2MB)
테스트 15 통과 (0.79ms, 10.2MB)
테스트 16 통과 (0.01ms, 10.2MB)

효율성 테스트

테스트 1 통과 (179.34ms, 16.1MB)
테스트 2 통과 (402.40ms, 21.9MB)
테스트 3 통과 (1961.17ms, 49.9MB)
테스트 4 통과 (140.68ms, 15MB)
테스트 5 통과 (2145.56ms, 51.9MB)

채점 결과

정확성: 76.2

효율성: 23.8

합계: 100.0 / 100.0