티스토리 뷰
title: "조합(2407)"
category: 백준[Class-4]
tags: [C++, JavaScript, 백준]
date: "2021-05-27"
문제 링크
C++
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string add_num(string num1, string num2){
string result = "";
int sum = 0;
while(!num1.empty() || !num2.empty() || sum>0){
if(!num1.empty()){
sum += num1.back() - '0';
num1.pop_back();
}
if(!num2.empty()){
sum += num2.back() - '0';
num2.pop_back();
}
result += to_string(sum%10); // 일의 자리만
sum /= 10;
}
reverse(result.begin(), result.end()); // 뒤집기
return result;
}
// 문제 풀이
void solution(){
int n, m;
cin >> n >> m;
vector<vector<string> > dp(n+1, vector<string>(n+1, "0"));
dp[0][0] = "1";
dp[1][0] = "1";
dp[1][1] = "1";
// n C r = n-1 C r + n-1 C r-1
for(int a=2; a<=n; a++){
for(int b=0; b<=a; b++){
if(a==b || b==0) dp[a][b] = "1";
else dp[a][b] = add_num(dp[a-1][b], dp[a-1][b-1]);
}
}
cout<<dp[n][m]<<"\n";
}
bool exists(const char* fileName){
FILE* fp;
if((fp = fopen(fileName, "r"))){
fclose(fp);
return true;
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
if(exists("stdin")){
freopen("stdin", "r", stdin);
solution();
fclose(stdin);
}
else{
solution();
}
return 0;
}
JavsScript
const fs = require("fs");
const input = fs.readFileSync("dev/stdin").toString().trim().split("\n");
// Function
const add_bigNum = (num1, num2) => {
let result = "";
let sum = 0;
while (num1.length > 0 || num2.length > 0 || sum > 0) {
if (num1.length > 0) {
sum += +num1[num1.length - 1];
num1 = num1.slice(0, -1);
}
if (num2.length > 0) {
sum += +num2[num2.length - 1];
num2 = num2.slice(0, -1);
}
result += (sum % 10).toString(); // 일의 자리
sum = Math.floor(sum / 10);
}
result = result.split("").reverse().join(""); // 뒤집기
return result;
};
// 문제 풀이
const [n, m] = input[0].split(" ");
const dp = Array.from({ length: n + 1 }, () =>
Array.from({ length: n + 1 }, () => "0")
);
dp[0][0] = dp[1][0] = dp[1][1] = "1";
for (let i = 2; i <= n; i++) {
for (let j = 0; j <= i; j++) {
if (i === j || j === 0) {
dp[i][j] = "1";
} else {
// n C r = n-1 C r + n-1 C r-1
dp[i][j] = add_bigNum(dp[i - 1][j], dp[i - 1][j - 1]);
}
}
}
console.log(dp[n][m]);
728x90
반응형
'Baekjoon Solutions > Class-4' 카테고리의 다른 글
[백준] 가장 긴 증가하는 부분 수열(11053) (0) | 2021.05.31 |
---|---|
[백준] 스티커(9465) (0) | 2021.05.29 |
[백준] N과 M(5)(15654) (0) | 2021.05.27 |
[백준] N과 M (2)(15650) (0) | 2021.05.27 |
[백준] 최단경로(1753) (0) | 2021.05.19 |
댓글