_우지 2022. 6. 15. 22:48

문제 유형

기본문제

 

배운점

3 3
1 1 1
2 2 2
0 1 0
3 3 3
4 4 4
5 5 100

위 입력을 다음코드로 2차원 배열에 넣을 수 있다.

문제도 문제인데 입출력이 너무 어렵다.

var input = fs
  .readFileSync(BOJkey ? "./자바스크립트로/2738/input.txt" : "./dev/stdin")
  .toString()
  .trim()
  .split("\n")
  .map((x) =>
    x
      .trim()
      .split(" ")
      .map((x) => +x)
  );

 

기존 코드는 array 에 바로 arr 를 넣어줬는데 문제가 생겼다.

이는 shallow copy가 되어서 3 X 3 배열 이라고 할때 첫번째줄을 수정하면 2번째 3번째 배열 모두 수정이 되는 오류가 발생했다.

const [n, m] = input.shift();
let arr = new Array(m);
let array = [];
arr.fill(0);
for (let i = 0; i < n; i++) {
  array.push(arr);
}

 

스프레드 연산자를 통해 해결했다.

const [n, m] = input.shift();
let arr = new Array(m);
let array = [];
arr.fill(0);
for (let i = 0; i < n; i++) {
  array.push([...arr]);
}

다른 분 코드를 보니 이런식으로 2차원 배열을 선언하셨더라.

let array = Array.from(Array(n), () => Array(m).fill(0));

문제풀이

const fs = require("fs");

BOJkey = true;

var input = fs
  .readFileSync(BOJkey ? "./자바스크립트로/2738/input.txt" : "./dev/stdin")
  .toString()
  .trim()
  .split("\n")
  .map((x) =>
    x
      .trim()
      .split(" ")
      .map((x) => +x)
  );
const [n, m] = input.shift();
let arr = new Array(m);
let array = [];
arr.fill(0);
for (let i = 0; i < n; i++) {
  array.push([...arr]);
}
// console.log(array);
// console.log(arr);
// console.log(input);
for (let i = 0; i < n; i++) {
  for (let j = 0; j < m; j++) {
    array[i][j] = input[i][j] + input[i + n][j];
  }
}

let answer = "";
for (let i = 0; i < n; i++) {
  for (let j = 0; j < m; j++) {
    answer += array[i][j].toString() + " ";
  }
  answer += "\n";
}
console.log(answer);
// console.log(input);