YeJin's Footsteps

2407번: 조합 본문

Computer Science & Engineering/알고리즘

2407번: 조합

YeJinii 2021. 8. 6. 19:46

문제 링크

https://www.acmicpc.net/problem/2407

 

2407번: 조합

n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)

www.acmicpc.net

 

문제 풀이 코드

#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>

using namespace std;
const int MN = 101;
string dp[MN][MN];

string sumString(string a, string b){
    long long sum = 0;
    string ret;
    while(a.size()||b.size()||sum){
        if(a.size()){
            sum+=a.back()-'0';//숫자로 변환
            a.pop_back();
        }
        if(b.size()){
            sum+=b.back()-'0';//숫자로 변환
            b.pop_back();
        }
        ret.push_back((sum%10)+'0');//문자로 변환
        sum/=10;
    }
    reverse(ret.begin(), ret.end());
    return ret;
}

int main(void){
    ios::sync_with_stdio(false); cin.tie(NULL);
    
    long long N, M; cin>>N>>M;
    
    for(int i=1; i<=N; i++){
        for(int j=0; j<=i; j++){
            if(j==0||i==j) dp[i][j]="1";
            else dp[i][j] = sumString(dp[i-1][j-1],dp[i-1][j]);
        }
    }

    cout<<dp[N][M];

    return 0;
}

자신있게 long long int형 DP방식으로 풀었다가 자꾸 틀려서

정수형이 아닌 string 형으로 문제를 해결해야함을 깨달았다.

'Computer Science & Engineering > 알고리즘' 카테고리의 다른 글

2011번: 암호코드  (0) 2021.08.07
1890번: 점프  (0) 2021.08.06
2 x n 타일링  (0) 2021.07.31
문자열 압축  (0) 2021.07.30
로또의 최고 순위와 최저 순위  (0) 2021.07.30
Comments