반응형
문제 출처
https://www.acmicpc.net/problem/13904
정답 풀이
마지막 날짜에서 ~ 1일 차까지 계속 최대 점수를 채워준다.
- max 값을 채워준다.
- 이미 넣은 값은 해당 x
- 남은 날을 비교했을 때, 현재 날짜보다 커야한다.
정답 코드
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const n = Number(input.shift());
input = input.map(el => el.split(' ').map(v => +v))
input.sort((a,b) => b[0] - a[0])
const visited = new Array(n).fill(false)
let answer = 0;
let new_arr = new Array(input[0][0] +1).fill(0)
for(let i = input[0][0]; i>=1; i--){ //날짜
let max = 0
let max_idx = 0
for(let j=0; j<n; j++){
if(visited[j])continue ;
if(input[j][1] > max && input[j][0] >= i){
max = input[j][1]
max_idx = j
}
}
visited[max_idx] = true
answer += max
}
console.log(answer)
틀린 코드
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const n = Number(input.shift())
input = input.map(el => el.split(' ').map(v => +v));
let last = 0
for(let i=0; i<n; i++){
last = Math.max(last, input[i][0])
}
let task = Array.from({length: last+1}).map(() => []);
for(let i=0; i<n; i++){
let [idx, score] = input[i]
task[idx].push(score)
}
let answer = 0;
let possible = []
for(let i=last; i>=1; i--){
let arr = task[i]
possible = [...possible, ...arr]
possible.sort((a,b) => a-b)
let max = possible.pop()
if(max === undefined) continue;
answer += max
}
console.log(answer, 'answer')
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 20058 : 마법사 상어와 파이어스톰 - javascript(dfs) (0) | 2024.10.10 |
---|---|
격자 회전 함수 (90도 회전) (3) | 2024.10.10 |
백준 16928: 뱀과 사다리 게임 - javascript(bfs) (0) | 2024.10.07 |
백준 1405 : 미친 로봇 - javascript(dfs) (0) | 2024.10.05 |
백준 2458: 키 순서 - javascript(dfs) (0) | 2024.10.04 |