일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ros2 remapping
- nav2 first-time robot setup guide
- Foxy tutorial
- humble development guides
- CODEUP 6073
- setting up transformations
- nav2 getting started
- ros2 튜토리얼 환경설정
- error
- ros2 development guides
- ros2 환경설정
- ros2 foxy tutorial
- ros2 transformations 개념
- Python
- nav2 development guides
- humble 환경설정
- foxy nav2
- nav2 튜토리얼
- nav2 설치
- ros2 foxy docker
- ros2 튜토리얼
- Nav2 document
- CodeUp
- ros2 configuring environment
- 코드업
- first-time robot setup guide
- docker foxy
- nav2 tutorial
- nav2 dev contatiner
- ROS FOXY 튜토리얼
- Today
- Total
BAN2ARU
[Python/백준] 1463번 : 1로 만들기 (DP : dynamic programing) 본문
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
풀이 (dp로 풀어야됨)
def make_one(n : int) :
dp = [0] * (n+1)
for i in range(2, n+1) :
dp[i] = dp[i-1] + 1
if i % 3 == 0 :
dp[i] = min(dp[i], dp[i//3] + 1)
if i % 2 == 0 :
dp[i] = min(dp[i], dp[i // 2] + 1)
return dp[n]
if __name__ == '__main__' :
n = int(input())
print(make_one(n))
dp 점화식
- 최초에 n이 1일 때의 연산값은 0임. (dp[1] = 0)
- n이 2일 때의 연산값
1. n에서 1을 빼고(우선) n-1의 연산 값(memorization)을 더한 값 (dp[2] = dp[2-1] + 1)
2. n을 2로 나누고(우선) n//2의 연산값(memorization)을 더한 값(dp[2] = dp[2//2] + 1)
을 비교(min(dp[2-1]+1, dp[2//2] + 1)
- n이 3일 때의 연산값
1. n에서 1을 빼고(우선) n-1의 연산 값(memorization)을 더한 값 (dp[3] = dp[3-1] + 1)
2. n을 3으로 나누고(우선) n//3의 연산 값(memorization)을 더한 값 (dp[3] = dp[3//3] + 1)
을 비교(min(dp[3-1]+1, dp[3//3] + 1)
- n이 4일 때의 연산값
1. n에서 1을 빼고(우선) n-1의 연산 값(memorization)을 더한 값 (dp[4] = dp[4-1] + 1)
2. n을 2로 나누고(우선) n//2의 연산 값(memorization)을 더한 값 (dp[4] = dp[4//1] + 1)
을 비교(min(dp[4-1]+1, dp[4//2] + 1)
...
- n이 6일 때의 연산값
1. n에서 1을 빼고(우선) n-1의 연산 값(memorization)을 더한 값 (dp[6] = dp[6-1] + 1)
2. n을 2로 나누고(우선) n//2의 연산 값(memorization)을 더한 값 (dp[6] = dp[6//2] + 1)
2. n을 3으로 나누고(우선) n//3의 연산 값(memorization)을 더한 값 (dp[6] = dp[6//3] + 1)
을 비교(min(dp[6-1]+1, dp[6//2] + 1, dp[6//3] + 1)
...
해당 방식을 반복 수행함
'Coding Test > BaekJoon' 카테고리의 다른 글
[백준/Python] 4344번 : 평균은 넘겠지 (0) | 2023.05.24 |
---|---|
[Python/백준] 9095번 : 1, 2, 3 더하기 (0) | 2022.10.23 |
[백준/Python] 4673번 : 셀프 넘버 (0) | 2022.10.19 |
[백준/Python] 1065번 : 한수 (0) | 2022.10.17 |
[백준/Python] 2562 최댓값 (0) | 2022.10.08 |