728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 마법의 돌을 최소한으로 사용하여 0층으로 갈 때의 마법의 돌 개수를 구하는 문제이다.
마법의 돌을 최소한으로 사용하려면 각 자릿수마다 -의 돌을 사용할지, +을 돌을 사용할지 결정하는 방법이 중요하다.
1의 자릿수부터 어떤 종류의 돌을 사용할지 정하며 전체 사용하는 돌의 개수에 더해준다.
만약 해당 자릿수의 값이 5 미만의 수이면, 그냥 -의 돌을 사용하여 내려온다.
만약 해당 자릿수의 값이 5를 초과하는 수이면, 반대로 그냥 +의 돌을 사용하여 올라간 후 한 번에 내려오는 것이 돌을 더 적게 사용하는 방법이다.
하지만 해당 자릿수의 값이 5이면 그때부터는 다음 자릿수의 값까지 고려해줘야 한다.
만약 다음 자릿수의 값이 5 미만의 수이면, 위의 5 미만의 수처럼 그냥 -의 돌을 사용하여 내려온다.
반면에 다음 자릿수의 값이 5 이상의 수이면, +의 돌을 사용하여 올라간 후 한 번에 내려온다.
위 방법으로 문제를 해결하면 최소한의 마법의 돌을 사용하여 0층으로 내려올 수 있다.
- 우선 입력받은 현재 위치한 층 수를 각 자릿수 별로 구분한다. storey_split = [int(i) for i in str(storey)]
- 1의 자릿수부터 사용하는 돌의 개수를 계산할 것이기 때문에 구분한 숫자 리스트를 거꾸로 뒤집어준다. storey_split.reverse()
- 마지막 자릿수를 계산할 때 5를 넘어 + 돌을 사용한다면 현재 위치한 층 수의 자릿수를 넘어갈 수 있기 때문에 0을 추가해 주어 다음 자릿수를 위한 공간을 만들어준다. storey_split.append(0)
- 리스트의 자릿수의 개수만큼 반복하며 for i in range(len(storey_split))
- 만약 해당 자릿수의 값이 5를 초과하는 값이면 if (storey_split[i] > 5)
- + 돌을 사용하여 올라가고 answer += 10 - storey_split[i]
- 다음 자릿수를 1 증가시켜 준다. storey_split[i + 1] += 1
- 만약 해당 자릿수의 값이 5이면 elif (storey_split[i] == 5)
- 그다음 자릿수의 값을 확인해 5 미만인 수이면 if (storey_split[i + 1] < 5)
- - 돌을 사용하여 그냥 내려온다. answer += storey_split[i]
- 반면에 다음 자릿수의 값이 5 이상인 수이면 else
- + 돌을 사용하여 올라가고 answer += 10 - storey_split[i]
- 다음 자릿수를 1 증가시켜 준다. storey_split[i + 1] += 1
- 반면에 해당 자릿수의 값이 5 미만인 수이면 else
- - 돌을 사용하여 그냥 내려온다. answer += storey_split[i]
반응형
3. 소스코드
def solution(storey):
answer = 0
storey_split = [int(i) for i in str(storey)]
storey_split.reverse()
storey_split.append(0)
for i in range(len(storey_split)):
if (storey_split[i] > 5):
answer += 10 - storey_split[i]
storey_split[i + 1] += 1
elif (storey_split[i] == 5):
if (storey_split[i + 1] < 5):
answer += storey_split[i]
else:
answer += 10 - storey_split[i]
storey_split[i + 1] += 1
else:
answer += storey_split[i]
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 배달 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.04.21 |
---|---|
[프로그래머스] 징검다리 건너기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.04.19 |
[프로그래머스] 숫자 카드 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.03.23 |
[프로그래머스] 시소 짝꿍 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.03.18 |
[프로그래머스] 보석 쇼핑 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.17 |
[프로그래머스] 호텔 대실 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.15 |
[프로그래머스] [3차] 방금그곡 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.13 |
[프로그래머스] 무인도 여행 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.11 |