티스토리 뷰

문제: https://softeer.ai/practice/9657

 

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

 

softeer.ai

Node.js 입출력

소프티어에서는 우측 상단의 공식 문서를 참고하여 문제 풀이를 할 수 있습니다. 입출력 방법은 여기 예시를 참고해주세요.

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

// 한 줄씩 입력받기
rl.on('line', (line) => {
  switch (line.trim()) {
    case 'hello':
      console.log('world!');
      break;
    default:
      console.log(`Say what? I might have heard '${line.trim()}'`);
      break;
  }
  // ...
}).on('close', () => {
  // readline 이벤트 종료
  console.log('Have a great day!');
  process.exit(0);
});

문제 풀이

공격을 할 때마다 일일이 그래프를 탐색하면 비효율적이라고 생각했습니다. 중요한 건 위치가 아니라 환경 파괴범의 이므로, 행마다 환경 파괴범이 명 몇인지 저장해두고 공격이 진행되는 행에 저장된 수를 감소시키는 방향으로 풀이했습니다.

 

단계:

  1. 행마다 환경 파괴범이 몇 명인지 배열에 저장합니다. (인덱스가 0이면 첫 번째 행을 뜻함)
  2. L ~ R에 해당하는 행의 개수를 배열에서 찾아 1씩 감소시킵니다. (단, 0 이하는 0으로 유지합니다)
  3. 공격을 모두 수행한 후, 배열의 개수를 모두 더해서 정답을 출력합니다.
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const inputs = [];

// 입력하기
rl.on('line', (input) => {
    inputs.push(input);
});

// 출력하기
rl.on('close', () => {
    const [n, m] = inputs[0].split(" ").map(Number);
    const graph = inputs.slice(1, n + 1).map(line => line.split(" ").map(Number));
    const attacks = inputs.slice(n + 1).map(line => line.split(" ").map(Number));
    
    const countPerRow = Array(n).fill(0); // 각 행의 환경 파괴범 수

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < m; j++) {
            if (graph[i][j] === 1) countPerRow[i]++; // 카운트
        }
    }

    // 공격 진행
    for (const [L, R] of attacks) {
        for (let i = L - 1; i < R; i++) {
            countPerRow[i] = countPerRow[i] > 0 ? countPerRow[i] - 1 : 0;
        }
    }

    const answer = countPerRow.reduce((acc, curr) => acc + curr); // 합계
    console.log(answer);
    
    process.exit(0);
});
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함