경우의 수는 너무 많을것 같으니 알고리즘을 생각해봤다
결국은 오른쪽 전체 중에 오른쪽 - 왼쪽 사이트 만큼. 즉 선택되지 않은 것들의 경우의 수를 구하면 되는 문제였다
백트래킹을 쓰려다 머리만 아파지고 콤비네이션(조합) 을 구현해서 풀었다
dp 로도 방법이 있다는데... 굳이 안써도 간단하게도 풀린다
https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
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 |
댓글