이 포스팅은 프로그래머스 시리즈 28 편 중 3 번째 글 입니다.

  • Part 1 - 01: 다리를 지나는 트럭
  • Part 2 - 02: 멀정한 사각형
  • Part 3 - This Post
  • Part 4 - 04: 메뉴 리뉴얼
  • Part 5 - 05: 전화번호 목록
  • Part 6 - 06: 가장 큰 수
  • Part 7 - 07: 예상 대진표
  • Part 8 - 08: 다단계 칫솔 판매
  • Part 9 - 09: 불량 사용자
  • Part 10 - 10: 베스트 앨범
  • Part 11 - 11: 합승 택시 요금
  • Part 12 - 12: 스타 수열
  • Part 13 - 13: 위장
  • Part 14 - 14: 주식 가격
  • Part 15 - 15: 디스크 컨트롤러
  • Part 16 - 16: N으로 표현
  • Part 17 - 17: 전화번호 목록
  • Part 18 - 18: 단어 변환
  • Part 19 - 19: 여행 경로
  • Part 20 - 20: 프린터
  • Part 21 - 21: 후보키
  • Part 22 - 22: 삼각 달팽이
  • Part 23 - 23: 실패율
  • Part 24 - 24: 입국심사
  • Part 25 - 26: 기둥과 보 설치
  • Part 26 - 27: 광고 삽입
  • Part 27 - 28: 퍼즐 조각 채우기
  • Part 28 - 29: 상호 평가
▼ 목록 보기

목차

▼ 내리기

풀이

가장 최소인 녀석을 계속해서 뽑아야 하기 때문에 heap 구조를 사용했다. 이 때 python으로 코딩을 하려한다면 무조건적으로 heapq를 사용할 것. priorityQueue는 속도가 너무 느려서 효율성 통과를 하지 못한다.

Code

import heapq
def solution(scoville, K):
    # 가장 작은 원소를 가져온다
    #   그 녀석이 K보다 큰지 파악한다.
    # 아니면
    #   그 다음 원소를 가져온다
    #   섞는다.
    #   섞은 횟수 1추가한다.
    #   다시 넣는다.
    # 반복한다.
    q = scoville[:]
    heapq.heapify(q)
    count = 0
    while q[0] < K and len(q) > 1: # 제일 작은 원소가 K보다 작고 들어간 개수는 2이상이면 진행
        a = heapq.heappop(q)
        b = heapq.heappop(q)
        c = a + b * 2
        heapq.heappush(q, c)
        count += 1
    
    if q[0] >= K:
        return count
    else:
        return -1

Reference