728x90
> Dynamic programming(동적계획법)
📖 문제 : 네트워크 선 자르기(Bottom-Up)
현수는 네트워크 선을 1m, 2m의 길이를 갖는 선으로 자르려고 합니다. 예를 들어 4m의 네트워크 선이 주어진다면
1) 1m+1m+1m+1m
2) 2m+1m+1m
3) 1m+2m+1m
4) 1m+1m+2m
5) 2m+2m
의 5가지 방법을 생각할 수 있습니다. (2)와 (3)과 (4)의 경우 왼쪽을 기준으로 자르는 위치가 다르면 다른 경우로 생각한다.
그렇다면 네트워크 선의 길이가 Nm라면 몇 가지의 자르는 방법을 생각할 수 있나요?
입력설명
첫째 줄은 네트워크 선의 총 길이인 자연수 N(3≤N≤45)이 주어집니다.
출력설명
첫 번째 줄에 부분증가수열의 최대 길이를 출력한다.
입력예제 1
7
출력예제 1
21
코드
n = int(input())
dy = [0]*(n+1)
dy[1]=1
dy[2]=2
for i in range(3, n+1):
dy[i] = dy[i-1] + dy[i-2]
print(dy[n])
Point ! ⭐️
- DP : 큰 문제를 작은 문제로 쪼개어 해결법을 찾은 뒤 큰 문제에 적용 => 규칙 찾기 중요 !
여기서는 점화식 세우며 규칙 찾기
출처
- 인프런 : 파이썬 알고리즘 문제 풀이
728x90
'Algorithm (Python, Java, SQL) > Inflearn Study' 카테고리의 다른 글
[Python Algorithm] Dynamic programming(동적계획법) - 최대 부분 증가수열 (0) | 2023.06.02 |
---|---|
[Python Algorithm] Dynamic programming(동적계획법) - 네트워크 선 자르기(Top-Down : 재귀, 메모이제이션) (0) | 2023.06.02 |
[Python Algorithm] 퀵 정렬 (0) | 2023.04.27 |
[Python Algorithm] 병합정렬 (Divide and Conquer) (0) | 2023.04.27 |
[Python Algorithm] 깊이/넓이 우선탐색(DFS, BFS) - 피자 배달 거리(DFS) (0) | 2023.04.27 |