스쳐가는비
devtravel
스쳐가는비
전체 방문자
오늘
어제
  • 분류 전체보기 (108)
    • 🎵 Daily (0)
    • 📚 Computer Science (11)
      • Algorithm (9)
      • Design Pattern (2)
    • 🔥 Programming (23)
      • C# (3)
      • C++ (5)
      • WPF (0)
      • Python (1)
      • OpenCV (9)
      • ML & DL (5)
    • 🔥 Web (13)
      • HTML (6)
      • JavaScript (7)
    • 📌 Tool (2)
      • Git (2)
      • Etc (0)
    • 📖 Certificate (10)
      • 컴활 1급 (2)
      • SQL 개발자 (2)
      • 리눅스 마스터 (0)
      • 정보처리기사 (0)
      • 사무자동화산업기사 (0)
      • ADsP (6)
    • 💻 OnlineJudge (49)
      • Baekjoon (49)
      • GoormEdu (0)
GitHub Contribution
Loading data ...

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스쳐가는비

devtravel

[백준 / BOJ] C++ 2407 조합
💻 OnlineJudge/Baekjoon

[백준 / BOJ] C++ 2407 조합

2022. 12. 7. 19:18

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

 

2407번: 조합

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

www.acmicpc.net

풀이

조합 공식을 이용 - (nCm = n-1Cm-1 + n-1Cm)을 이용하여 값을 구한다.

 

long long을 사용해도 자료형 허용 범위를 넘어가는 미친 문제이다. 조합 공식쓰고 그냥 했다가 왜 안되지? 

하며 꽤나 헤매었던 문제...

Visual studio 2022 C++ 17 개발환경으로 long long으로 빌드하거나 디버깅하면 문제없이 다 출력이 된다.

 

그래서 오히려 헤메었다.. python에서는 자바의 Biginteger가 백그라운드에서 자동 지원이라서 string으로 구현하지않아도

문제없이 실행이 된다.

 

아무튼 아래 코드를 참조하자.

 

Code ( C++ )

#include <iostream>
#include <algorithm>

using namespace std;

string base[105][105] = {"0", };

string StringCalculate(string a, string b)
{
	int add = 0;
	string result;
	while (!a.empty() || !b.empty() || add)
	{
		if (!a.empty())
		{
			add += a.back() - '0';
			a.pop_back();
		}
		if (!b.empty())
		{
			add += b.back() - '0';
			b.pop_back();
		}
		result.push_back((add % 10) + '0');
		add /= 10;
	}
	reverse(result.begin(), result.end());

	return result;
}

string nCm(int n, int m)
{
	if (n == m || m == 0)
		return "1";

	if (base[n][m] != "")
		return base[n][m];

	return base[n][m] = StringCalculate(nCm(n - 1, m - 1), nCm(n - 1, m));
}




int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;
	cout << nCm(n, m);
}

'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글

[백준 / BOJ] C++ 1003 피보나치 함수  (0) 2022.12.11
[백준 / BOJ] C++ 2448 별찍기 - 11  (0) 2022.12.07
[백준 / BOJ] C++ 2096 내려가기  (0) 2022.11.28
[백준 / BOJ] C++ 1991 트리 순회  (0) 2022.11.27
[백준 / BOJ] C++ 1967 트리의 지름  (0) 2022.11.25
    '💻 OnlineJudge/Baekjoon' 카테고리의 다른 글
    • [백준 / BOJ] C++ 1003 피보나치 함수
    • [백준 / BOJ] C++ 2448 별찍기 - 11
    • [백준 / BOJ] C++ 2096 내려가기
    • [백준 / BOJ] C++ 1991 트리 순회
    스쳐가는비
    스쳐가는비
    The biggest risk is not taking any risk

    티스토리툴바