Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바스크립트
- 프로그래머스
- JS프로그래머스
- HTML5
- css기초
- 몽고DB
- HTML
- 알고리즘
- dp알고리즘
- 프로그래머스JS
- 다이나믹프로그래밍
- 백준골드
- 안드로이드 스튜디오
- 리액트댓글기능
- 리액트커뮤니티
- 백준구현
- JS
- 백준js
- 리액트
- 백준
- js코테
- 코테
- 프로그래머스코테
- 코딩테스트
- 포이마웹
- 익스프레스
- 백준nodejs
- 백준알고리즘
- CSS
- 백준구현문제
Archives
- Today
- Total
개발새발 로그
[JS] 백준 12865 : 평범한 배낭 - DP문제 본문
https://www.acmicpc.net/problem/12865
📋풀이방법
1. 첫번째 물건(무게 : 6, 가치 : 13)을 dp배열에 넣어서 검사한다.
2. 두번째 물건(무게 : 4, 가치: 8)을 넣어 검사해본다.
3. 세번째 물거(무게 : 3, 가치 : 6)
4. 이를 반복해준다.
🤟내 제출
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim();
input=input.replace(/\r/g,"").split("\n");
let [N,K]=input.shift().split(" ").map(Number);
let arr=[];
for (let i = 0; i < N; i++) {
arr.push(input[i].split(' ').map(Number));
}
const dp = Array(K + 1).fill(0);
for (let i = 0; i < N; i++) {
const [W, V] = arr[i];
console.log(dp)
for (let j = K; j >= W; j--) {
if (dp[j - W] + V > dp[j]) {
dp[j] = dp[j - W] + V;
}
}
}
console.log(dp[K]);
💢어려웠던 점
1. DP문제임을 파악하지 못했다
-처음에 그리디 문제인줄 알고 정렬을 해서 풀었다.
2. DP배열에 값을 넣을 때 뒤에서 부터 넣어줘야 했다.
-앞에서 부터하게 되면 만약 무게 : 2, 가치 :4 의 물건이 들어가는 상황이라면
-> dp[2]에서부터 4가 들어가다가 dp[4]에서는 dp[2]에서 4를 더한 8 이 들어가게된다.
->즉 물건의 중복이 생긴다.
-> 그러므로 최대무게 7kg인 dp[7]에서 부터
-> 들어오는 물건의 무게를 뺀 dp[7-weight] 의 값에서 가치를 더한 값과 비교해야한다.
728x90
반응형
LIST
'알고리즘 > DP' 카테고리의 다른 글
[JS] 백준 1149 - RGB거리 - DP (0) | 2023.09.07 |
---|---|
[JS] 백준 9059 : 1, 2, 3 더하기 - DP (1) | 2023.08.29 |
[JS] 백준 11054번 : 가자 긴 바이토닉 부분 수열 - DP(다이나믹 프로그래밍) (0) | 2023.08.04 |
[JS] 백준 2293번 : 동전 1 - DP (백준 메모리초과) (0) | 2023.08.02 |
[JS] 백준 9251번 : LCS - DP문제 (0) | 2023.07.29 |