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 등등)
문제의 포인트는 두개였다.
5를 올릴 것인가 내릴 것인가?
0~4는 내림, 6~9는 올림이지만 5같은 경우는 올려도 5, 내려도 5이다.
이때 앞자리 숫자를 보고 판단한다.
예를 들어 숫자 355에서 일의 자리 5를 내림처리해서 350으로 만들 경우 400까지 +5가 필요하지만, 5를 올림처리해서 360으로 만들면 +4면 충분하다.
즉, 그 앞자리 수가 5보다 큰 경우 올림, 5 미만일 경우 내림처리 해준다.
9 처리
숫자 9는 10이 되어 앞자리에 영향을 주는데 이를 처리해주어야 한다.