안녕하세요

[node.js] 2775 부녀회장이 될테야 (자바스크립트) 2차원 배열 기본 수학 단계 본문

백준 자바스크립트

[node.js] 2775 부녀회장이 될테야 (자바스크립트) 2차원 배열 기본 수학 단계

sakuraop 2022. 5. 24. 00:56

문제를 해결하기 위해 스스로 충분한 이해가 필요할 것 같아 별도로 글을 작성합니다. 

 

문제를 보자마자 필요한 열쇠는 배열이라 생각했습니다.

분명히 배열을 만들면 쉽게 해결이 될 것 같은데, 배열을 혼자서 아무리 만들어 보려고 해도 실패했습니다.

그렇다고 해서 답을 보기는 싫었기 때문에 유튜브에 자바스크립트 2차원 배열을 검색해보았습니다.

https://www.youtube.com/watch?v=tMeDkp1J2OM 

자바스크립트로 2차원 배열 만들기

아주 친절한 영상을 발견했습니다. 쉽고 간단하게 2차원 배열을 만드는 방법이 무려 4가지나 있습니다. 

첫 번째 방법이 직관적이기 때문에 첫 번째 방법을 이용했습니다.

const rows = 5;
const columns = 6;
const array = [];

for (i = 0; i < rows; i++) {
  array[i] = [];
}
console.log(array);

우선 rows를 생성합니다.

array의[i]번째 인덱스에  []를 5개 추가합니다.


[ [], [], [], [], [] ]
 
for (i = 0; i < rows; i++) {
  array[i] = [];
  for (j = 0; j < columns; j++) {
    array[i][j] = j;
  }
}
console.log(array);
 
columns를 만들어줄 차례입니다.
array[i] 는 각각의 []를 의미합니다. 
array[0] 는 첫 번째 []를 가리킵니다.   [ 0, 1, 2, 3, 4, 5 ],
array[0][j] 첫 번째 [0]의 [j]인덱스에 j(column)를 순서대로 넣습니다.
array[i] -> array[0, 1, 2, 3, 4, 5] 순서대로 순회하며 j를 넣게 되면 다음과 같이 출력됩니다.
[
  [ 0, 1, 2, 3, 4, 5 ],
  [ 0, 1, 2, 3, 4, 5 ],
  [ 0, 1, 2, 3, 4, 5 ],
  [ 0, 1, 2, 3, 4, 5 ],
  [ 0, 1, 2, 3, 4, 5 ]
]
 
 

2775 부녀회장이 될테야

“a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다”

주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

아래와 같이 첫줄에 T를 이후로 k, n ,k ,n 을 번갈아 입력받습니다.

2
1
3
2
3

결과

6
10

제출한 답

const input = require("fs").readFileSync("dev/stdin").toString().split("\n").map((x) => x.trim());

let array = [];

for (i = 0; i < input[0]; i++) {
  let count = 0;
  let columns = input[2 * i + 1];
  let rows = input[2 * i + 2];
  for (j = 0; j <= columns; j++) {
    array[j] = [];
    for (l = 0; l < rows; l++) {
      if (j == 0) {
        count++;
        array[j][l] = count;
      }
      if (j >= 1) {
        if (l == 0) {
          array[j][l] = 1;
        } else {
          array[j][l] = array[j - 1][l] + array[j][l - 1];
        }
      }
    }
  }
  console.log(array[columns].slice(-1)[0]);
}

코드 설명

  • 배열 만드는 방법에 따라 r,c을 집어넣습니다.

  •       if (j == 0) {
    0층의 경우에는 1,2,3,4,5,... 1씩 증가하는 수열이므로 별도로 처리합니다.
  •       if (j >= 1) {
            if (l == 0) {
              array[j][l] = 1;
    1호의 모든 층은 1입니다.
  •         } else {
              array[j][l] = array[j - 1][l] + array[j][l - 1];
    나머지 호의 규칙은 (바로 아랫층 호실의 인원)과 (바로 이전 호실의 인원)을 합한 값입니다.