백준 2775번 부녀회장이 될테야-JS

yugyeongKim·2021년 11월 1일
0

백준

목록 보기
31/52

귀여운 이름에 그와 안어울리게 머리 아프게 하던 문제. 처음에 규칙은 음ㅇㅋ근데 이걸 어케 구현하지...? 이러면서 와안전 뻘짓 하다가 드디어 규칙을 구현하는 코드가 생각남!

아니 앞에거를 어케 해라는 거야잇~~!!!했는데 규칙이 있는 숫자들을 배열에 넣어서 어랏? 이런 아이디어가 급 떠오름. 그리고 맞았음!

- 제출한 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

let T = Number(input.shift());
let N = input.length;
let answer = '';

for(let i = 0; i < T*2; i = i + 2) {
  let k = Number(input[i]);
  let n = Number(input[i+1]);
  let house = [];
  let arr = [];
  for(let i=1; i <= n; i++) {
    arr.push(i);
  }
  house.push(arr);
  console.log(house);

  for(let i=1; i <= k; i++) {
    arr = [];
    let sum = 0;
    for(let j=1; j <= n; j++) {
      sum = sum + house[i-1][j-1];
      arr.push(sum);
    }
    house.push(arr);
  }
  //console.log(house);
  // console.log(house[house.length-1][house[0].length-1])
  answer += house[house.length-1][house[0].length-1] + '\n';
}
console.log(answer);

코드를 설명하자면
1. 각 층과 호수를 제공해준 숫자를 k=층, n=호수 이렇게 변수에 담기
2. house라는 배열은 각 층수의 배열을 담은 전체 아파트 배열, arr배열은 각 층의 호수들에 사는 사람의 수를 담은 배열
3. 일단 0층에 호수에 사는 사람의 수를 나타내기 위해 k호수만큼 i를 arr배열에 담는다.(0층의 k호수까지의 사람들 나타내기 완성)
4. 0층의 배열이 완성된 arr배열을 house배열에 push한다.
5. 1층의 2호에 사는 사람의 수 = house[0층][1] + house[0층][2]
1층의 3호에 사는 사람의 수 = house[0층][1] + house[0층][2] + house[0층][3]
이렇게 하다보면
k층의 n호에 사는 사람의 수 = sum + house[k-1][n-1]
(n이 n-1인 이유는 배열은 0부터 시작하니까 n번째 요소는 n-1인덱스의 요소가 되므로)
이런 규칙이 나온다. 여기서 i를 1부터 k이하까지 첫번째 for문을 작성하고, 그 안에 j를 1부터 n이하까지 두번째 for문을 작성하는 것으로 구현했다.
6. 완성된 한 층(arr배열)을 house배열에 push
7. house배열의 마지막 배열의 마지막 요소를 답으로 출력

무조건 주루룩 선언해서 할 생각보다 어떻게 배열을 활용하거나 뭐 여러방법을 생각하며 문제를 풀자.

0개의 댓글