728x90
문제
https://www.acmicpc.net/problem/18353
18353번: 병사 배치하기
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
이 문제는 다이나믹 프로그래밍으로 풀 수 있다.
이중 for 문을 이용해 첫번째 for문으로는 비교해야할 요소를 하나 정하고 두번째 for문으로 비교해야할 요소들의 전을 한번씩 탐색해주면서 +1 해줘서 d를 채워 나가는 식으로 풀 수 있다.
소스코드
import sys
n = int(sys.stdin.readline())
d = [1] * (n+1)
lst = list(map(int, sys.stdin.readline().split()))
for i in range(1,n) :
for j in range(0,i) :
if lst[i] < lst[j] :
d[i] = max(d[i] , d[j] + 1 )
print(len(lst) - max(d))
728x90
'BOJ > 다이나믹 프로그래밍' 카테고리의 다른 글
BOJ : 2579 계단오르기 (0) | 2022.11.25 |
---|---|
BOJ : 15989 1,2,3 더하기 4 (0) | 2022.11.25 |
BOJ : 1149 RGB거리 (파이썬) (0) | 2022.09.14 |
BOJ : 14501 퇴사 (파이썬) (0) | 2022.09.05 |
BOJ : 1463 1로 만들기 (파이썬) (0) | 2022.09.03 |