경우의 수는 너무 많을것 같으니 알고리즘을 생각해봤다
결국은 오른쪽 전체 중에 오른쪽 - 왼쪽 사이트 만큼. 즉 선택되지 않은 것들의 경우의 수를 구하면 되는 문제였다
백트래킹을 쓰려다 머리만 아파지고 콤비네이션(조합) 을 구현해서 풀었다
dp 로도 방법이 있다는데... 굳이 안써도 간단하게도 풀린다
https://www.acmicpc.net/problem/1010
let input = [];
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
readline.on("line", (line) => {
input.push(line);
});
readline.on("close", () => {
solution(input);
process.exit();
});
const solution = (inp) => {
inp.shift();
for (el of inp) {
let [n, m] = el.split(" ").map((el) => Number(el));
let nn = m - n;
let ans = BigInt(1);
if (2 * n > m) {
n = m - n;
}
for (let i = 0; i < n; i++) {
ans *= BigInt(m - i);
}
for (let i = 1; i <= n; i++) {
ans /= BigInt(i);
}
console.log(Number(ans));
}
};
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 6550/javascript] 부분 문자열 (0) | 2022.10.11 |
---|---|
[백준 1543/javascript] 접두사 찾기 (0) | 2022.10.10 |
[백준 1543/javascript] 문서 검색 (1) | 2022.10.08 |
[백준 11047/javascript] 동전 0 (0) | 2022.10.07 |
[백준 1251/javascript] 단어 나누기 (0) | 2022.10.06 |
댓글