728x90
소스코드
let fs = require('fs');
const filePath = process.platform === `linux` ? `/dev/stdin` : `예제.txt`;
let input = fs.readFileSync(filePath).toString().split('\n');
const c = console.log
n= Number(input[0])
let numbers = input[1].split(" ").map(Number)
let dp = []
for(let i = 0 ; i < n ; i++){
dp[i] = 1
}
for(let i = 1 ; i < n ; i++){
for(let j = 0 ; j < i ; j++){
if(numbers[i] > numbers[j]){
dp[i] = Math.max(dp[i],dp[j] +1)
}
}
}
c(Math.max(...dp))
풀이
박스안에 작은 박스를 계속해서 넣는 다이나믹 프로그래밍 방식의 문제이다.
입력1
값 | 1 | 6 | 2 | 5 | 7 | 3 | 5 | 6 |
dp | 1 | 2 | 2 | 3 | 4 | 3 | 4 | 5 |
7인경우 1257 로 4개를 넣을 수 있다. 라는 부분이 좀 헷갈렸습니다.
문제
https://www.acmicpc.net/problem/1965
1965번: 상자넣기
정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가
www.acmicpc.net
728x90
'BOJ > 다이나믹 프로그래밍' 카테고리의 다른 글
BOJ : 11052 카드구매하기 (JS) (0) | 2023.01.05 |
---|---|
BOJ : 9656 돌게임2 (JS) (0) | 2023.01.04 |
BOJ : 11722 가장 긴 감소하는 부분 수열 (JS) (0) | 2023.01.02 |
BOJ : 11054 가장긴바이토닉부분수열 (JS) (0) | 2023.01.01 |
BOJ : 10844 쉬운계단수 (JS) (0) | 2022.12.30 |