본문 바로가기
2025/Solving

SFTR_9657 나무 공격(JS)

by 껐다 켜보셨어요? 2025. 2. 8.

코테 재활하러 옴

ㅋㅋㅋ 날짜가 ㅋㅋㅋ ... ㅋㅋㅋ

약간 소 잃고 외양간 고치는 느낌이긴 한데

아무튼

https://softeer.ai/practice/9657

 

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

 

softeer.ai

 

이 어렵지도 않은 문제를 ㅋㅋㅋ !! ㅋㅋ !!

푸는 데 얼마 걸렸는지는 나만 알고 있어야지 큼큼

코드도 겁나 드럽다 

 

const fs = require("fs");
const readline = require("readline");
const r1 = readline.createInterface({
  // input: process.stdin, // 웹 붙여넣을 때 여기 풀어 주세요!
  input: fs.createReadStream("softeer_9657_test.txt"),
  output: process.stdout,
});
const calc = (arr, range, c) => {
  for (let i = range[0] - 1; i < range[1]; i++) {
    for (let j = 0; j < c; j++) {
      if (arr[i][j] > 0) {
        arr[i][j]--;
        break;
      }
    }
  }
};

let c;
let input = [];
let tc = [];
let range = [];

r1.on("line", (line) => {
  input.push(line.split(" "));
}).on("close", () => {
  c = input[0][1]; 
  for (let i = 1; i < input.length - 2; i++) {
    // 두 번의 공격은 빼고
    tc.push(input[i].map((each) => Number(each)));
  }
  range.push(input[input.length - 2].map((each) => Number(each)));
  range.push(input[input.length - 1].map((each) => Number(each)));

  calc(tc, range[0], c);
  calc(tc, range[1], c);

  let sum = 0;
  for (let i = 0; i < tc.length; i++) {
    for (let j = 0; j < tc[i].length; j++) {
      sum += tc[i][j];
    }
  }

  console.log(sum);
  process.exit(0);
});

진짜 쌩 배열로 받아서 문제에 나온 내용대로 구현한 풀이. 

근데 사실 이 문제는 더 간단하게 푸는 방법이 있다

저건 그냥 구현 연습하느라구(진짜?) 길게 푼 거고 

 

걍 각 행의 합을 이용하면 되긴 함

어차피 문제는 환경파괴범이 몇 명 남았는지만 물어보기 때문이다

그래서 각 행의 합을 저장하는 배열을 만들고

제시된 공격 구간에 해당하는 행의 값을 1씩 빼 주면 됨

const fs = require("fs");
const readline = require("readline");
const reader = readline.createInterface({
  input: fs.createReadStream("softeer_9657_test.txt"),
  //   input: process.stdin,
  output: process.stdout,
});

const input = [];
const rSum = []; // 각 행의 합을 저장하는 배열
const calc = (lineSum, range) => {
  console.log(lineSum);
  for (let i = range[0] - 1; i < range[1]; i++) {
    if (lineSum[i] > 0) lineSum[i]--;
  }
};

reader
  .on("line", (line) => {
    input.push(line.split(" ").map((each) => Number(each)));
  })
  .on("close", () => {
    for (let i = 1; i < input.length - 2; i++) {
      let sum = 0;
      for (let j = 0; j < input[i].length; j++) {
        sum += input[i][j];
      }
      rSum.push(sum);
    }

    calc(rSum, input[input.length - 2]);
    calc(rSum, input[input.length - 1]);

    let result = 0;
    for (let i = 0; i < rSum.length; i++) {
      result += rSum[i];
    }

    console.log(result);
  });

 

뭐지?

왼쪽이 구현 오른쪽이 잔머리 쓴 풀이다

거의 차이 안 나는 것 같음

 

'2025 > Solving' 카테고리의 다른 글

BOJ_25192 인사성 밝은 곰곰이(JAVA)  (0) 2025.04.11
BOJ_1920 수 찾기(JAVA)  (0) 2025.04.11
BOJ_7569 토마토(JAVA)  (0) 2025.04.06
BOJ_2178 미로 탐색(JAVA)  (0) 2025.04.06
BOJ_1926 그림(JAVA)  (0) 2025.04.05

댓글