본문 바로가기
백준

백준 11050: 이항 계수 1(java/C)

by unhyepnhj 2024. 7. 6.

문제

 

풀이

 

이항 계수는 주어진 집합에서 주어진 개수만큼 순서 없이 뽑는 조합의 가짓수를 말한다.

이항 정리로 전개했을 때 계수 어쩌고... 라고 뜰 텐데 그냥 고등학생 때 확통 순열 조합 하면서 배운 nCr이다.

nCr 공식만 알고 있으면 해당 공식 그대로 이용해 쉽게 풀 수 있다.

 

팩토리얼을 구하기 위해 팩토리얼 계산 메소드 getFactorial()을 사용하여 풀이했으며, 이는 순환 알고리즘을 이용해 작성할 수 있다.

 

 

[JAVA]

늘 그렇듯 BufferedReader 사용

String[] input=in.readLine().split(" ");

readLine()은 한 줄 전체를 읽는 메소드이므로 split()을 이용하여 띄어쓰기 단위로 한 번 나눠 주었다.

Scanner 사용하려면 띄어쓰기 고하지 않고 nextInt로 받으면 된다.

StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());

이렇게 split() 말고 StringTokenizer+nextToken()으로 해도 무방할 듯 하다(import문 주의)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
	private static int getFactorial(int n) {
		if(n<=1) return 1;
		else return(n*getFactorial(n-1));
	}
	public static void main(String[] args) throws IOException{
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		
		String[] input=in.readLine().split(" ");
		int N=Integer.parseInt(input[0]);
		int K=Integer.parseInt(input[1]);
		
		int c=getFactorial(N)/(getFactorial(K)*getFactorial(N-K));
		System.out.println(c);
	}
}

 

[C]

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int getFactorial(int n) {
	if (n <= 1) return 1;
	else return(n * getFactorial(n - 1));
}

int main(void) {
	int N, K;
	scanf("%d %d", &N, &K);

	int c = getFactorial(N) / (getFactorial(K) * getFactorial(N - K));
	printf("%d", c);

	return 0;
}

 

'백준' 카테고리의 다른 글

백준 11650: 좌표 정렬하기(java)  (0) 2024.07.09
백준 2798: 블랙잭(java/C)  (0) 2024.07.06
백준 30802: 웰컴 키트(java/C)  (0) 2024.07.06
백준 2292: 벌집(java/C)  (0) 2024.07.06
백준 2775: 부녀회장이 될테야(java/C)  (0) 2024.07.06