티스토리 뷰
반응형
https://www.acmicpc.net/problem/2407
2407번: 조합
n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)
www.acmicpc.net

⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류
- 수학
- 다이나믹 프로그래밍
- 조합론
- 임의 정밀도 / 큰 수 연산
⊙ 문제 접근 과정
오버플로우를 피하기 위해서 string으로 값을 받아줘야 한다!
1의 자리부터 string에 값을 순서대로 추가해준다.
그리고 reverse로 뒤집어주자!
⊙ 문제 풀이
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
#define MAX 101
int N, M;
string factorial[MAX][MAX];
string bigNumAdd(string n1, string n2) {
int sum = 0;
string result;
//1의 자리부터 더하기
while (!n1.empty() || !n2.empty() || sum) {
if (!n1.empty()) {
sum += n1.back() - '0';
n1.pop_back();
}
if (!n2.empty()) {
sum += n2.back() - '0';
n2.pop_back();
}
result.push_back((sum % 10) + '0');
sum /= 10;
}
//역순이므로 다시 역순
reverse(result.begin(), result.end());
return result;
}
string combination(int n, int r) {
if (n==r || r==0)
return "1";
string &result = factorial[n][r]; // 참조형 변수
//memoization
if (result != "")
return result;
//파스칼삼각형
result = bigNumAdd(combination(n-1, r-1), combination(n-1, r));
return result;
}
int main() {
cin >> N >> M;
cout << combination(N, M);
}
⊙ 결과

⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > C++ [CPP]' 카테고리의 다른 글
[백준(BOJ)] 1966번 : 프린터 큐 - C++[CPP] (0) | 2021.08.25 |
---|---|
[백준(BOJ)] 11660번 : 구간 합 구하기 5 - C++[CPP] (0) | 2021.08.25 |
[백준(BOJ)] 16235번 : 나무 재테크 - C++[CPP] (0) | 2021.08.21 |
[백준(BOJ)] 4949번 : 균형잡힌 세상 - C++[CPP] (0) | 2021.08.19 |
[백준(BOJ)] 10814번 : 나이순 정렬 - C++[CPP] (1) | 2021.08.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 그리디
- 알고리즘
- 자바
- 문자열
- 쉽게배우는
- 해답
- 답
- 구현
- C++
- 백준
- py
- Python
- 연습문제
- 운영체제
- 파이썬
- 쉽게배우는자바프로그래밍
- 정렬
- OS
- 프로그래머스
- 쉽게 배우는 자바 프로그래밍
- Web
- 풀이
- 자바스크립트
- 정리
- 정답
- java
- BFS
- JS
- 우종정
- CPP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함