몸과 마음이 건전한 SW 개발자

Softeer [Level 2] 나무 공격 {언어 : JavaScript} 본문

알고리즘

Softeer [Level 2] 나무 공격 {언어 : JavaScript}

스위태니 2024. 11. 8. 17:19

문제 링크

https://softeer.ai/practice/9657

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

정답 코드

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
const inputData = [];

rl.on('line', (line) => {
    inputData.push(line.split(" ").map((e) => Number(e)));
}).on('close', () => {
    const [n, m] = inputData[0];
    const board = inputData.slice(1, n+1);
    const [l1, r1] = inputData[n+1];
    const [l2, r2] = inputData[n+2];
    const attack = (l, r) => {
        for (let i = l-1; i < r; i++) {
            for (let j = 0; j < m; j++) {
                if (board[i][j]) {
                    board[i][j] = 0;
                    break;
                }
            }
        }
    }
    attack(l1, r1);
    attack(l2, r2);
    const answer = board.reduce((res, els) => {
        const cnt = els.reduce((sum, e) => {
            if (e) {
                return sum+1;
            }
            return sum;
        });
        return res + cnt;
    }, 0);
    console.log(answer);
    process.exit(0);
});

풀이 방법

  1. attack이라는 함수를 만들어서 l부터 r까지의 범위의 행을 열방향으로 진행하면서 환경 파괴범을 제거한다.
  2. 환경파괴범이 있으면 환경파괴범을 제거하고 그 행의 공격은 멈춘다.
  3. l1, r1과 l2, r2를 각각 attack함수의 파라미터로 넣는다.
  4. 결과값을 reduce를 두 번 사용하여 남은 환경 파괴범의 수를 반환하면 끝!

느낀점

  • 쉬운 문제라도 범위를 실수하면 언제든지 틀릴 수 있다는 점을 명심해야 한다.
  • 더 간단하게 풀 수 있는 방법이 있는지 확인해 보는 것 또한 매우 중요하다.