[Programmers] - Python / 파이썬 - 마법의 엘리베이터

o_jooon_·2024년 11월 30일
0

Programmers

목록 보기
3/5
post-thumbnail

문제

시간 복잡도

  • n만큼의 반복 -> O(n)O(n)

문제 접근법

  • 자릿수 대로 탐색하며 다음과 같은 조건을 확인해야 한다.
    • 현재 자릿수가 5인가? -> -1을 5번 누르거나 +1을 5번 누르거나 횟수는 같지만, +1을 5번 누르면 다음 자릿수가 바뀌므로 확인해주어야 한다.
  1. 층수를 각 자릿수마다 나누어 계산하기 위해 배열로 변환한다.
  2. 자릿수를 뒤에서부터 차례대로 탐색한다.
    2-1. 현재 자릿수가 5면서 다음 자릿수가 5미만이거나 현재 자릿수가 5 미만인 경우, 현재 자릿수를 총 버튼 수에 더한다.
    2-2. 아닌 경우, 10에서 현재 자릿수를 뺀 수를 총 버튼 수에 더하고, 다음 자릿수를 1 증가시킨다.
  3. 탐색 범위에서 제외된 첫 자릿수는 6 이상이면 10에서 빼고 1을 더하고 아닌 경우 현재 자릿수를 총 버튼 수에 더한다.

코드

def solution(storey):
    storey = list(map(int, str(storey)))
    ans = 0
    
    for i in range(len(storey) - 1, 0, -1):
        if (storey[i] == 5 and storey[i - 1] < 5) or storey[i] < 5:
            ans += storey[i]
        else:
            ans += 10 - storey[i]
            storey[i - 1] += 1
    ans += 10 - storey[0] + 1 if storey[0] > 5 else storey[0]
    
    return ans
profile
안녕하세요.

0개의 댓글