문제
시간 복잡도
문제 접근법
- 자릿수 대로 탐색하며 다음과 같은 조건을 확인해야 한다.
- 현재 자릿수가 5인가? -> -1을 5번 누르거나 +1을 5번 누르거나 횟수는 같지만, +1을 5번 누르면 다음 자릿수가 바뀌므로 확인해주어야 한다.
- 층수를 각 자릿수마다 나누어 계산하기 위해 배열로 변환한다.
- 자릿수를 뒤에서부터 차례대로 탐색한다.
2-1. 현재 자릿수가 5면서 다음 자릿수가 5미만이거나 현재 자릿수가 5 미만인 경우, 현재 자릿수를 총 버튼 수에 더한다.
2-2. 아닌 경우, 10에서 현재 자릿수를 뺀 수를 총 버튼 수에 더하고, 다음 자릿수를 1 증가시킨다.
- 탐색 범위에서 제외된 첫 자릿수는 6 이상이면 10에서 빼고 1을 더하고 아닌 경우 현재 자릿수를 총 버튼 수에 더한다.
코드
def solution(storey):
storey = list(map(int, str(storey)))
ans = 0
for i in range(len(storey) - 1, 0, -1):
if (storey[i] == 5 and storey[i - 1] < 5) or storey[i] < 5:
ans += storey[i]
else:
ans += 10 - storey[i]
storey[i - 1] += 1
ans += 10 - storey[0] + 1 if storey[0] > 5 else storey[0]
return ans