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 | 29 | 30 | 31 |
Tags
- 함수 parmater
- 1668
- html5
- 1568
- Async/Await
- 배열같은배열아닌너
- 탐욕 알고리즘
- 9461
- 함수 선언문
- 11399
- 11047
- 렉시컬 스코프
- javascript
- 함수 이놈
- 호이스팅
- 자류구조
- 1904
- 백준
- baekjoon
- setTiemOut
- 함수 arguments
- 2667
- 동적계획법
- 유사배열
- 비동기처리
- 1543
- 1302
- 1931
- event loop
- 1236
Archives
- Today
- Total
두치의 개발공부
BaekJoon_1912 (연속합) 본문
https://www.acmicpc.net/problem/1912
문제풀이
동적 계획법 개념을 적용하여 문제를 풀 수 있습니다.
연속된 수 끼리만 더할 수 있는 조건을 놓치면 안됩니다!
빈 배열(dp)을 하나 만들고, 반복문을 돌면서
입력값을 dp에 먼저 넣은 뒤에
입력값과 dp의 이전값 + 입력값을 비교하여 dp의 이전값 + 입력값이 더 크면 더하여 dp의 해당 index 값을 바꾸면 됩니다.
소스코드
/*
연속된 수 끼리만 더할 수 있다.
list 이번값과 dp 이전값을 더하였을 때 dp의 이전값보다 크면 더하는 방식을 반복하여 연속된 수 사이에서 계속 더하기를 반복해 나간다.
*/
const answer = ([n,data]) => {
const list = data.split(' ').map(Number);
const dp = [];
for (let index = 0; index < Number(n); index++) {
dp[index] = list[index]
if(dp[index] < dp[index-1] + list[index]){
dp[index] = dp[index-1] + list[index]
}
}
console.log(Math.max(...dp))
}
const input = [];
require('readline').createInterface(process.stdin, process.stdout).on('line', (line) => {
input.push(line);
}).on('close', () => {
answer(input);
process.exit();
})
소스코드는 gitHub에서도 확인 할 수 있습니다🤗
https://github.com/duduchi/Algorithm/blob/main/Dynamic/BaekJoon_1912.js