알고리즘/DP

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

슈크림 붕어빵 2023. 12. 21. 14:15

문제

시간복잡도

O(n)

해결방법

dp[i][j]는 i층 j호의 인원을 나타내며 j호 까지의아래층의 사람을 모두 더한 값이다.

dp[i][j-1]는 1호 앞의 집의 인원수이며 아래층의 1호 앞까지의 합이다. 따라서 아래층의 같은 호수 합인 dp[i-1][j]을 더하여 dp[i][j]를 구한다.

 

코드

dp는 apartment배열이다.

0층은 j호에 j명이 거주하므로 직접 구하고 시작한다.

 

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

let input_arr = [];
let tmp = [];

for (let i = 1; i <= parseInt(input[0]) * 2; i = i + 2) {
  //input 정리
  let tmp = [input[i], input[i + 1]];
  input_arr.push(tmp);
}

let apartment = []; //아파트 dp
for (let i = 0; i <= 14; i++) {
  //아파트 1층 구하기
  tmp[i] = i;
}
apartment.push(tmp);

for (let i = 1; i <= 14; i++) {
  //2층부터 아파트 구하기
  apartment.push([0]);
  for (let j = 1; j <= 14; j++) {
    apartment[i].push(apartment[i][j - 1] + apartment[i - 1][j]);
  }
}

for (let i = 0; i < parseInt(input[0]); i++) {
  console.log(apartment[parseInt(input_arr[i][0])][parseInt(input_arr[i][1])]);
}