반응형
마법의 돌을 아끼기 위해 민수는 항상 최소한의 버튼을 눌러서 이동하려고 합니다.
1부터 예를 들어봅시다.
1층에 있다면 -1을 1만큼 사용합니다.
2층에 있다면 -1을 2만큼 사용합니다.
3층에 있다면 -1을 3만큼 사용합니다.
4층에 있다면 -1을 4만큼 사용합니다.
5층에 있다면 -1을 5만큼 사용합니다.
6층에 있다면 1을 4만큼 사용하여 10층으로 간 뒤 -10을 하나 사용하여 총 5번만 사용할 수 있습니다.
7층에 있다면 1을 3만큼 사용하여 10층으로 간 뒤 -10을 1만큼 사용하여 총 4번만 사용할 수 있습니다.
같은 이유로, 8층은 3번, 9층은 2번만 사용하면 됩니다.
10층에 있는 경우 -10을 한 번만 사용합니다.
11부터 14까지는 -10 한 번과 -1을 각각 해당하는 수만큼 사용하여 2, 3, 4, 5만큼 사용할 수 있습니다.
15 또한 -10 한 번과 -1을 5번 사용하여 6만에 내려갈 수 있습니다.
16은 어떨까요? +1을 4번 사용하여 20이 된 뒤 -10을 두 번 사용하여 총 6번 사용할 수 있습니다.
같은 이유로 17~19는 5, 4, 3번 사용할 수 있습니다.
20은 -10을 두 번 사용하면 됩니다.
위 내용을 표로 정리해볼까요?
민수의 위치 | 사용한 횟수 | 민수의 위치 | 사용한 횟수 |
1 | 1 | 11 | 2 |
2 | 2 | 12 | 3 |
3 | 3 | 13 | 4 |
4 | 4 | 14 | 5 |
5 | 5 | 15 | 6 |
6 | 5 | 16 | 6 |
7 | 4 | 17 | 5 |
8 | 3 | 18 | 4 |
9 | 2 | 19 | 3 |
10 | 1 | 20 | 2 |
규칙성이 보이시나요?
1부터 5까지와 10부터 6까지 순서가 1~5로 같습니다.
11부터 15까지와 20부터 16까지 순서가 2~6로 같습니다.
그렇다면 25는 7이 되겠군요.
이러한 규칙성을 포함한 코드를 작성하였습니다.
def solution(storey):
answer = 0
for i in range(len(str(storey))-1 ,-1, -1):
if int(str(storey)[i]) <5 and int(str(storey)[i-1])>4 and len(str(storey)) > 1:
answer += int(str(storey)[i])
storey -= int(str(storey)[i])*(10**(len(str(storey))-i-1))
elif int(str(storey)[i]) <=5 and int(str(storey)[i-1])>4 and len(str(storey)) > 1:
answer += int(str(storey)[i])
storey += int(str(storey)[i])*(10**(len(str(storey))-i-1))
elif int(str(storey)[i])<=5:
answer += int(str(storey)[i])
storey -= int(str(storey)[i])*(10**(len(str(storey))-i-1))
else:
answer += 10-int(str(storey)[i])
storey += (10-int(str(storey)[i]))*(10**(len(str(storey))-i-1))
if storey >=10 and str(storey)[0] <'6':
answer += int(str(storey)[0])
return answer
반응형
'코딩' 카테고리의 다른 글
[JS] 파이썬만 할 줄 아는 사람의 자바스크립트 문제 풀이 (0) | 2023.08.25 |
---|---|
아무도 안 궁금하겠지만 공표합니다. 자바스크립트를 공부해보겠습니다. (0) | 2023.08.25 |
[파이썬] 코딩테스트 연습 - 성격 유형 검사하기 (0) | 2023.08.18 |
[파이썬] 코딩테스트 연습 - 개인정보 수집 유효 기간 (0) | 2023.08.18 |
[파이썬] 코딩테스트 연습 - 신고 결과 받기 (0) | 2023.08.18 |