상세 컨텐츠

본문 제목

[프로그래머스] 148653. 마법의 엘리베이터| deque | 파이썬, 소스코드, 정답

Coding Test/문제풀이

by yooputer 2023. 6. 14. 13:47

본문

https://school.programmers.co.kr/learn/courses/30/lessons/148653

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 요약

  • 현재 층에서 -1, +1, -10, +10, -100, +100, ...으로 이동할 수 있는 마법의 엘리베이터가 있다. 
  • 한번 누를 때마다 마법의 돌 1개가 소모된다. 
  • 현재 층이 주어질 때 0층으로 가기위해 필요한 최소한의 마법의 돌의 개수를 구하라.

문제 조건

  • 1 <= 현재층 <= 100,000,000

핵심 전략

  • 만약 1의 자리수가 0~4이면 마이너스 버튼을 누른다.
  • 만약 1의자리수가 6~9이면 플러스 버튼을 누른다.
  • 만약 1의자리수가 5이면 플러스버튼과 마이너스버튼을 누른 경우 모두를 비교해야 한다. 

소스코드

from collections import deque

def solution(storey):
    answer = int(1e9)
    q = deque([[storey, 0]])

    while q:
        n, cnt = q.popleft()

        while n > 0:
            if n < 10:
                if n <= 5:
                    cnt += n
                else:
                    cnt += (10-n%10)+1
                answer = min(answer, cnt)
                break


            if n%10 < 5:
                cnt += n%10
                n = n // 10
            elif n%10 > 5:
                cnt += (10 - n%10)
                n = (n // 10)+1
            else:
                q.append([n//10, cnt + 5])
                q.append([((n // 10)+1), cnt + 5])
                break

    return answer

 

관련글 더보기