320x100
https://school.programmers.co.kr/learn/courses/30/lessons/12980
동적계획법(DP)을 이용하여 풀 수 있다.
아래서부터 위로 채워가는 Bottom - Up 방식을 이용하면 런타임 에러가 난다. n만큼 반복문을 돌아야 하는데 n의 크기가 최대 10억이기 때문이다. 문제가 풀리긴 하니 작은 입력 크기에서 사용해야 함.
# Bottom-Up
def solution(n):
dp = [0] * (n+1)
dp[1] = 1
for i in range(2,n+1):
if i%2 == 1:
dp[i] = dp[i-1]+1
else:
dp[i] = min(dp[i-1]+1,dp[int(i/2)])
return dp[n]
Top - Down 방식을 이용하면 짝수마다 2로 나누므로 효율성 테스트까지 통과할 수 있다.
# Top-down
def solution(n):
ans = 0
while n != 2:
# n == 1일 때
if n == 1:
return 1
# n이 짝수일 때, 슈트 이용
elif n % 2 == 0:
n //= 2
# n이 홀수일 때, 건전지 소모
elif n % 2 == 1:
n -= 1
ans += 1
ans += 1
return ans
'코딩테스트' 카테고리의 다른 글
[파이썬] 나머지가 1이 되는 수 찾기 - 월간 코드 챌린지 시즌3 [CODING TEST #60] (0) | 2022.08.22 |
---|---|
[파이썬] 성격 유형 검사하기 - 2022 KAKAO TECH INTERNSHIP [CODING TEST #59] (0) | 2022.08.20 |
[파이썬] 2 x n 타일링 [CODING TEST #57] (0) | 2022.08.17 |
[파이썬] JadenCase 문자열 만들기 [CODING TEST #56] (0) | 2022.08.17 |
[파이썬] 더 맵게 - 힙(Heap) [CODING TEST #54] (0) | 2022.08.16 |
댓글