JasonScript

Jason's Research Blog

Development/Algorithm

< 알고리즘 문제 풀이 > 마법의 엘레베이터

jason.bak 2023. 12. 27. 12:07

문제 링크 > 코딩테스트 연습 - 마법의 엘리베이터 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

솔루션 >

def solution(storey):
    answer = []

    def dfs(stage, count):
        # 목표 층에 도달하면 현재까지의 이동 횟수를 answer에 추가
        if stage == 0:
            answer.append(count)
            return

        # 현재 층의 일의 자리 숫자 계산
        one = stage % 10
        # 위로 올라가거나 아래로 내려가는 데 필요한 이동 횟수 계산
        up, down = 10 - one, one

        # 이동 횟수가 적은 방향으로 재귀 호출
        if up < down:
            dfs(stage // 10 + 1, count + up)  # 위로 올라감
        elif down < up:
            dfs(stage // 10, count + down)    # 아래로 내려감
        else:
            # 이동 횟수가 같다면 두 방향 모두 탐색
            dfs(stage // 10 + 1, count + up)  # 위로 올라감
            dfs(stage // 10, count + down)    # 아래로 내려감

    # 주어진 층 수에서 시작
    dfs(storey, 0)
    # 계산된 마법의 돌 사용 횟수 중 최소값 반환
    return min(answer)