
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const inputs = fs.readFileSync(path).toString().trim().split('\n').map(Number);
const apart = Array.from({ length: 15 }, () =>
Array.from({ length: 14 }, (_, i) => i + 1)
);
for (let i = 1; i <= 14; i++) {
for (let j = 0; j < 14; j++) {
if (j === 0) apart[i][j] = apart[i - 1][j];
else {
apart[i][j] = apart[i][j - 1] + apart[i - 1][j];
}
}
}
let front = 1;
while (front < inputs.length) {
const i = inputs[front++];
const j = inputs[front++];
console.log(apart[i][j - 1]);
}
⏰ 소요한 시간 : -
아파트는 0층부터 15층까지 있고 각 층은 1호부터 14호까지 있기에 해당하는 배열을 만들어 초기화 해주었다.
0층의 i호는 i명이 산다고 되어 있어 배열을 만들면서 해당 값으로 초기화 해주었다. 어차피 1층부터는 반복문을 수행하면서 고쳐질 데이터라 문제되지 않는다.
이후 1층부터(0층은 초기화하면서 값을 넣어줌) 14층까지, 각층의 1호부터 14호까지(0부터 13까지) 값을 업데이트 해준다.
만약 j가 0이라면 즉 k층의 0호라면 k-1층의 0호와 값이 동일하다.
j가 0이 아닐때는 현재층 이전호수와 내 아래층 현재호수를 더해주면 문제에서 요구하는 내 아래층의 현재호수까지의 누적합을 구할 수 있다.
나는 dp로 풀이했지만 파스칼이 삼각형 수학적 풀이로 풀이하기도 한다.