Skip to content

Commit 8799959

Browse files
committed
📝 Post BOJ Solution.
1 parent 22ecfc0 commit 8799959

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
layout: single
3+
title: "[백준 11050] 이항 계수 1 (C#, C++) - soo:bak"
4+
date: "2025-04-10 15:22:00 +0900"
5+
description: 구현, 수학, 조합 개념을 활용한 백준 11050번 이항 계수 문제의 C# 및 C++ 풀이와 해설
6+
---
7+
8+
## 문제 링크
9+
[11050번 - 이항 계수 1](https://www.acmicpc.net/problem/11050)
10+
11+
## 설명
12+
**이항 계수**(Binomial Coefficient)를 계산하는 기본적인 수학 문제입니다.
13+
14+
### 이항 계수란?
15+
이항 계수란, `n`개의 원소 중에서 `k`개를 선택하는 경우의 수를 말하며, 조합(Combination)이라고도 부릅니다.
16+
수학적으로는 다음과 같이 정의됩니다:
17+
18+
$$
19+
\binom{n}{k} = \frac{n!}{k!(n-k)!}
20+
$$
21+
22+
이는 순서와는 관계없이 `k`개를 선택하는 모든 가능한 경우의 수를 의미하며, 조합 문제의 기초 개념으로 자주 등장합니다.
23+
24+
### 접근법
25+
1. `n!`, `k!`, `(n-k)!`을 각각 반복문을 통해 직접 계산합니다.
26+
2. 그 값을 이항 계수 공식에 대입하여 결과를 출력합니다.
27+
3. 문제 조건 상 `0 ≤ k ≤ n ≤ 10` 이므로 수가 작아 오버플로우 걱정이 없습니다.
28+
29+
### 시간 복잡도
30+
- 팩토리얼은 모두 반복문으로 계산하므로 각 계산의 시간 복잡도는 **O(n)**입니다.
31+
- 하지만 `n`의 최댓값이 10이므로 전체 연산은 매우 작아 **O(1)**로 간주할 수 있습니다.
32+
33+
---
34+
35+
## Code
36+
<b>[ C# ] </b>
37+
<br>
38+
39+
```csharp
40+
namespace Solution {
41+
class Program {
42+
static int Factorial(int n) {
43+
int result = 1;
44+
for (int i = 2; i <= n; i++) result *= i;
45+
return result;
46+
}
47+
48+
static void Main(string[] args) {
49+
var input = Console.ReadLine()!.Split().Select(int.Parse).ToArray();
50+
int n = input[0], k = input[1];
51+
52+
int result = Factorial(n) / (Factorial(k) * Factorial(n - k));
53+
Console.WriteLine(result);
54+
}
55+
}
56+
}
57+
```
58+
59+
<br><br>
60+
<b>[ C++ ] </b>
61+
<br>
62+
63+
```cpp
64+
#include <iostream>
65+
66+
using namespace std;
67+
68+
int main() {
69+
ios::sync_with_stdio(false);
70+
cin.tie(nullptr);
71+
72+
int n, k; cin >> n >> k;
73+
74+
int ans = 1;
75+
for (int i = 2; i <= n; i++)
76+
ans *= i;
77+
for (int i = 2; i <= k; i++)
78+
ans /= i;
79+
for (int i = 2; i <= (n - k); i++)
80+
ans /= i;
81+
82+
cout << ans << "\n";
83+
84+
return 0;
85+
}
86+
```

0 commit comments

Comments
 (0)