문제
https://www.acmicpc.net/problem/18111
자바스크립트(node.js)로 풀이했습니다.
최종코드
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');
const [n, m, b] = input[0].split(' ');
const soils = [];
input.slice(1).forEach((line) => {
soils.push(...line.split(' ').map(Number));
});
const soilCounts = new Array(257).fill(0);
soils.forEach((soil) => (soilCounts[soil] += 1));
const checkTime = (h, inventory) => {
let time = 0;
for (const soil in soilCounts) {
if (h > soil) {
time += soilCounts[soil] * (h - soil);
inventory -= soilCounts[soil] * (h - soil);
} else if (h < soil) {
time += 2 * soilCounts[soil] * (soil - h);
inventory += soilCounts[soil] * (soil - h);
}
}
if (inventory < 0) {
return Infinity;
}
return time;
};
let minTime = Infinity;
let maxHeight = 0;
for (let height = 0; height <= 256; height++) {
const finalTime = checkTime(height, b);
if (finalTime < minTime) {
minTime = finalTime;
maxHeight = height;
} else if (finalTime === minTime) {
if (maxHeight < height) {
maxHeight = height;
}
}
}
console.log(minTime, maxHeight);
인사이트
- 비둘기집의 원리 기억하자! 땅의 높이는 0 ~ 256 사이의 값이므로 500 * 500 순회를 256 순회로 줄일 수 있다.
- 배열의 총 길이를 알고 그 배열을 0으로 채우고 싶은 경우
new Array(N).fill(0);
- 배열의 각 요소를 number형으로 바꾼 새로운 배열을 얻고 싶은 경우
arr.map(Number);
- 배열은
const
로 만들어도 값 변경 가능
'알고리즘 > 문제풀이' 카테고리의 다른 글
[JavaScript][node.js] 백준 1327 소트 게임 (1) | 2024.02.09 |
---|---|
[JavaScript][node.js] 프로그래머스 피로도 (1) | 2024.02.07 |
[JavaScript][node.js] 백준 1406 에디터 (1) | 2024.02.01 |
[JavaScript][node.js] 백준 11053 가장 긴 증가하는 부분 수열 (1) | 2024.01.26 |
[JavaScript][node.js] 백준 14940 쉬운 최단거리 (0) | 2024.01.09 |