코딩테스트 연습 - 점프와 순간 이동
OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈�
programmers.co.kr
* 풀이
이동할 거리 N이 주어지면, 해당 거리의 절반만 이동하면 순간이동을 통해서 나머지 거리를 한 번에 이동할 수 있음
이동할 거리 N이 홀수인 경우에는, 짝수인 N-1 거리까지만 이동하고 1회 점프하면 목표치에 도달할 수 있음
입력값 N을 반복하여 2로 나눈다.
나눈 몫이 홀수이거나 소숫점이 생기는 경우에, 홀수의 경우에는 -1, 소숫점이 생기는 경우에는 소숫점을 제거하며 다시 2로 나누는 것을 반복함
이 때 홀수를 제거하거나 소숫점을 제거할 때 건전지 사용량(answer)을 +1한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from math import floor
def solution(n):
answer = 0
while n > 0 :
n /= 2
remain = n % 2
if remain == 1 :
# 홀수임
n -= 1
answer += 1
elif remain % 1 > 0 and remain % 1 < 1 :
# 소수점 있음
n = floor(n)
answer += 1
return answer
|
cs |