백준, 18111 마인크래프트 javascript

otter·2022년 2월 20일
0
post-custom-banner

백준,18111 마인크래프트

📖 https://www.acmicpc.net/problem/18111

👨‍💻 문제 풀이

  • 문제가 길다 -> 이해하기 힘들다 였는데
  • 하나하나 적어가면서 문제를 풀면 생각보다 간단했다.

💻 제출한 코드

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

const [N, M, blocks] = input.shift().split(' ').map(Number);
const map = input.map((row) => row.split(' ').map(Number));

function getTime(target) {
    let blockNum = blocks;
    let remove = 0;
    let add = 0;
    let time;
    for(let i = 0; i < N; i++) {
        for(let j = 0; j < M; j++) {
            if(map[i][j] > target) {
                remove += map[i][j] - target;
                blockNum += map[i][j] - target
            } else if(map[i][j] < target) {
                add += target - map[i][j];
                blockNum -= target - map[i][j];
            }
            time = remove * 2 + add;
        }
    }
    if(blockNum < 0) return [Number.MAX_SAFE_INTEGER, target];
    return [time, target];
}


const answer = [];
for(let i = 256; i >= 0; i--) {
    answer.push(getTime(i));
}

answer.sort((a,b) => {
    if(a[0] === b[0]) return b[1]-a[1];
    else return a[0] - b[0];
})

console.log(answer[0].join(' '));

이번 문제를 풀면서,

  • 어렵지만 생각보다 풀만했던 문제.
  • 다만 나는 구현을 할때 특정 알고리즘밖에 생각하지 못하는 것 같다.
  • 다른 사람들의 구현 방법을 보면서 조금 더 간결하고, 가독성 좋은 방법을 배우고 싶다.
profile
http://otter-log.world 로 이사했어요!
post-custom-banner

0개의 댓글