-
마법의 엘리베이터코딩 테스트/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인 경우 한 자리 더 아래 숫자를 확인해서 답을 찾았다.
반응형