문제요약
절대값이 10^c 형태인 엘리베이터 버튼
버튼 누르면 현재 층수 + 버튼 값으로 이동
(단, 합이 0 보다 작으면 움직이지 않음)
0층 : 가장 아래층
현재 엘베층 : 민수가 있는 층
버튼 1번에 마법의 돌 1개 소모
어떤 층에서 0층으로 갈 때, 필요한 돌의 개수?
입력
1 ≤ 엘베 층수 storey ≤ 10^8
출력
return int
어떻게 풀까?
- +/- 양측으로 조정 가능
⇒ 각 자리수 별로 0에 가까운지 10에 가까운지 구분해서 10-n/n 값 중 작은 것을 카운팅해주면 될 것!
⇒ 1의 자리에서 가장 높은 단위까지로 반복문으로 수행(10^8이지만, 9자리이므로 충분)
- 이 때, 10에 가깝다면 윗 자리 값에 +1을 해주기
⇒ 아래 단위에서 버튼 한 번 누르나, 윗 단위에서 한 번 누르나 버튼 누른 횟수 카운팅은 동일
⇒ 가장 높은 자리의 경우, 별도 처리 필요(10에 가깝다면 10-n을 카운팅 해주고 그 값이 올림이 되었을 때를 고려하여 +1을 추가 카운팅해주기)
- 단, 0이나 10에 대하여 동일하게 가까운 5의 경우는 별도 고려 필요할 것!
⇒ 이 때에는 윗자리가 5이상인지 조건을 걸어, 5이상이면 올려주고 미만이면 내려주는 방식으로 처리 필요
내 코드
def solution(storey):
storey_list = list(map(int, str(storey)))
ans = 0
for i in range(len(storey_list)-1, -1, -1):
if 10 - storey_list[i] > storey_list[i]:
ans += storey_list[i]
elif storey_list[i] == 5:
ans += 5
if storey_list[i-1] >= 5:
storey_list[i-1] += 1
else:
ans += 10 - storey_list[i]
if i == 0:
ans += 1
else:
storey_list[i-1] += 1
return ans
'알고리즘 문제(Python) > 프로그래머스' 카테고리의 다른 글
[Lv.3] 미로 탈출 명령어(Python) (0) | 2023.01.08 |
---|---|
[Lv.3] 부대복귀(Python) (0) | 2023.01.05 |
[Lv.2] 유사 칸토어 비트열(Python) (2) | 2023.01.03 |
[Lv.2] 할인 행사(Python) (0) | 2022.12.01 |
[Lv.2] 두 큐 합 같게 만들기(Python) (0) | 2022.11.30 |