동캄의 코딩도장

프로그래머스 level2 [마법의 엘리베이터] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [마법의 엘리베이터] 파이썬

동 캄 2023. 4. 13. 23:44

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

 

프로그래머스

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

programmers.co.kr

#프로그래머스 level2 마법의 엘리베이터
def solution(storey):
    answer = 0
    storey=str(storey)
    list_=list(map(int,storey))
    for i in range(len(list_)-1,0,-1):
        if list_[i]>5: # 현재 숫자가 5보다 크면 올림
            answer+=10-list_[i]
            list_[i-1]+=1
        elif list_[i]==5 and list_[i-1]>=5: # 현재 숫자가 5이고, 바로 앞자리의 숫자가 5 이상이면 올림
            answer+=10-list_[i]
            list_[i-1]+=1
        else: # 현재 숫자가 5보다 작거나, 현재 숫자가 5이고, 바로 앞자리의 숫자가 5 미만이면 내림
            answer+=list_[i]
    if list_[0]>5: # 맨 앞자리 숫자가 5보다 크면
        answer+=10-list_[0]
        answer+=1
    else:
        answer+=list_[0] # 맨 앞자리 숫자가 5보다 작거나 같으면
    return answer

어떤 알고리즘으로 풀어야할지 고민되었지만, 경우를 잘 따졌더니 해결되었다.

 

재귀로 깔끔하게 해결하신 분의 풀이가 있어 첨부한다.

def solution(storey):
    if storey < 10 :
        return min(storey, 11 - storey)
    left = storey % 10
    return min(left + solution(storey // 10), 10 - left + solution(storey // 10 + 1))