알고리즘 문제 풀기

백준 13904 : 과제 - javascript(그리디)

Fo_rdang 2024. 10. 10. 10:56
반응형

문제 출처 

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')
반응형