[프로그래머스] 마법의 엘리베이터 - 파이썬/구현

JinUk Lee·2023년 6월 28일
0

프로그래머스

목록 보기
35/48

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



def solution(storey):
    answer = 0

    storey = str(storey)

    q = list(storey)
    q = list(map(int,q))

    while len(q)>1:
        now = q.pop()

        if 0<= now <5:
            answer += now
        elif 5<now<=9:
            answer += 10-now
            q[-1] +=1
            # 아래의 과정은 9를 처리해주는 과정이다.
            if q[-1] == 10:
                if len(q) > 1:
                    q[-2] += 1
                    q[-1] = 0
                elif len(q) == 1:
                    q.insert(0, 1)
                    q[-1] = 0

        elif now == 5:
            if q[-1]>=5:
                answer += now
                q[-1] += 1
                # 마찬가지로 9를 처리해준다.
                if q[-1]==10:
                    if len(q)>1:
                        q[-2]+=1
                        q[-1]=0
                    elif len(q)==1:
                        q.insert(0,1)
                        q[-1]=0

            elif q[-1]<5:
                answer +=now

    if 0 <= q[0] <= 5:
        answer += q[0]
    elif 5 < q[0] <= 9:
        answer += 10 - q[0]+1

    return answer

문제의 요지는 숫자가 주어지면 가장 적게 이동하며 10, 100, 1000 등 10의 제곱수의 배수로 만드는 것이다. (3000, 5000 등등)

문제의 포인트는 두개였다.

  1. 5를 올릴 것인가 내릴 것인가?
    0~4는 내림, 6~9는 올림이지만 5같은 경우는 올려도 5, 내려도 5이다.
    이때 앞자리 숫자를 보고 판단한다.
    예를 들어 숫자 355에서 일의 자리 5를 내림처리해서 350으로 만들 경우 400까지 +5가 필요하지만, 5를 올림처리해서 360으로 만들면 +4면 충분하다.
    즉, 그 앞자리 수가 5보다 큰 경우 올림, 5 미만일 경우 내림처리 해준다.

  2. 9 처리
    숫자 9는 10이 되어 앞자리에 영향을 주는데 이를 처리해주어야 한다.

profile
개발자 지망생

0개의 댓글