ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 마법의 엘리베이터
    코딩 테스트/Level 2 2023. 1. 1. 11:33
    반응형

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

    def solution(storey):
        def solve(num, total):
            if num == 0:
                return total
            num_log = int(log10(num))  # 자리수 - 1
            first = num // 10 ** num_log  # 제일 앞 숫자
            if first < 5:
                return solve(num - first * 10 ** num_log, total + first)
            elif first > 5:
                return solve(10 ** (num_log + 1) - num, total + 1)
            else:
                if num_log == 0:
                    return first + total
                num2 = num - first * 10 ** num_log
                first2 = num2 // 10 ** (num_log - 1)
                if first2 < 5:
                    return solve(num2, total + first)
                else:
                    return solve(10 ** (num_log + 1) - num, total + 1)
    
        from math import log10
        return solve(storey, 0)
    result = solution(555)
    print(result)
    assert result == 14

    숫자가 6인 경우 1씩 버튼을 누르면 6회.
    이것보다는 -10 버튼은 1회 누른 후 +1 버튼을 4회 누르는 것이 더 좋다. 총 5회

    이를 상용로그(밑이 10인 로그)를 이용해서 구현했다. 

    구현할 때 층수가 음수면 상용로그를 쓰기 불편하니까... 
    항상 양수가 나오도록 계산했다. 

    숫자가 6인 경우 6 -10 = -4층에서 1을 4번 누르는 것과
    10 - 6 = 4층에서 -1을 4번 누르는 것은 같다. 

    숫자가 5인 경우 한 자리 더 아래 숫자를 확인해서 답을 찾았다. 

    반응형
Designed by Tistory.