✅ 문제
문제링크
🔗 https://www.acmicpc.net/problem/11050
✅ 풀이
🔹 코드 1 (재귀함수)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int result = factorial(n) / (factorial(n - k) * factorial(k));
System.out.println(result);
}
public static int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
}
이항 계수란 수학에서 조합(Combination)을 나타내는 개념으로, 주어진 집합에서 원하는 개수만큼 순서없이 뽑는 조합의 개수를 말한다.
다음과 같이 수식을 표기하고 계산한다.
$\left(\begin{array}{c}n\\ k\end{array}\right)\;=\;_{n\;}\textrm{C}_{\;k}\;=\;\cfrac{n!}{(n\;-\;k)!\;k!}\;(단,\;0\;\leq\;k\;\leq\;n)$
StringTokenizer st
를 선언하고 n
과 k
를 입력받는다.
int result
를 선언해서 결과값을 받아주도록 한다.
factorial()
메서드를 사용해 위 계산식과 같이 factorial(n) / (factorial(n - k) * factorial(k))
계산 결과를 result
에 저장한다.
result
를 출력해주도록 한다.
factorial (int n)
메서드
팩토리얼 계산을 구현하는 메서드로 int
를 반환한다.
if문을 통해 n
이 1
보다 같거나 작으면 return 1;
하여 1
을 반환한다.
아니라면 return n * factorial(n - 1);
하여 재귀 호출을 한다.
🔹 결과 1
🔹 코드 2 (반복문)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int result = factorial(n) / (factorial(n - k) * factorial(k));
System.out.println(result);
}
public static int factorial(int n) {
int result = 1;
while (n != 0) {
result *= n;
n--;
}
return result;
}
}
반복문을 사용해 이항 계수 계산을 구현해보자.
StringTokenizer st
를 선언하고 n
과 k
를 입력받는다.
result
에 이항계수 계산을 저장한다.
result
를 출력해주도록 한다.
factorial (int n)
메서드
팩토리얼 계산을 구현하는 메서드로 int
를 반환한다.
int result = 1;
하여 반환할 계산 결과값을 저장할 변수를 선언한다.
while문을 사용해 n != 0
조건이 참일 때까지 반복한다.
result *= n;
하여 result
에 n
을 곱한 결과를 result
에 저장한다.
n--;
하여 n
을 줄여간다.
반복이 종료되면 result
를 반환한다.
🔹 결과 2
🔹 알게된 정보
- 이항 계수에 대해 알아보고 계산방법을 팩토리얼 계산으로 구현해보았다.
'Problem Solving (Java) > 백준' 카테고리의 다른 글
[백준] 20920번 : 영단어 암기는 괴로워 (실버 Ⅲ) - Java/자바 (0) | 2025.07.03 |
---|---|
[백준] 2108번 : 통계학 (실버 Ⅱ) - Java/자바 (0) | 2025.07.03 |
[백준] 10872번 : 팩토리얼 (브론즈 Ⅲ) - Java/자바 (0) | 2025.06.30 |
[백준] 24511번 : queuestack (실버 Ⅲ) - Java/자바 (0) | 2025.06.29 |
[백준] 2346번 : 풍선 터뜨리기 (실버 Ⅲ) - Java/자바 (0) | 2025.06.29 |