알고리즘 문제 풀기

백준 1461 : 도서관 - javascript(그리디)

Fo_rdang 2024. 10. 17. 11:03
반응형

문제 출처 

https://www.acmicpc.net/problem/1461

 

정답 풀이 

- 양수와 음수를 따로 생각해줘야 한다. 

- 양수 배열과 음수 배열중 가장 절댓값이 큰 값을 나중에 total 에서 빼준다 

=> 가장 긴 거리를 가고 안돌아오는 것이 이득임. 

- 절댓값이 큰 책부터 처리해야함 

 

정답 코드 

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); 
const [n,m] = input[0].split(' ').map(v => +v); 
const place = input[1].split(' ').map(v => +v)

let maxDistance =0; 
const negatives = place.filter(v => v<0).sort((a,b) => a-b);//절대값이 큰게 앞으로 
const positives = place.filter(v => v>0).sort((a,b) => b-a);

if(negatives.length > 0){
    maxDistance = Math.abs(negatives[0])
}
if(positives.length > 0){
    maxDistance = Math.max(maxDistance, positives[0])
}

let total = 0; 

for(let i=0; i<negatives.length; i+=m){
   total += Math.abs(negatives[i]) * 2
}

for(let i=0; i<positives.length; i+=m){
    total += positives[i] * 2
}

total -= maxDistance 

console.log(total)
반응형