본문 바로가기
코테연습

백준 문제 2407번 조합 문제

by jackypark 2022. 8. 30.

백준 문제 

쉬운 문제인줄 알고 시도했던 문제... 하지만 메모리 할당과 컴파일 방법에 많이 실패를 했다... 고로 3번 끝에 문제를 통과했다 ㅠㅠ...

Scanner을 쓰면 메모리를 더 잡아먹고 시간이 더 걸리므로 코테할때는 되도록이면 BufferedReader를 사용한다

 

그리고 이번 조합 문제를 풀때 자료형 크기 때문에 애를 먹었었는데 그걸 해준 것이 바로 BigInteger라는 클래스이다

BigInteger 클래스를 사용하게 되면 int나 long형 범위를 넘어가도 문제를 풀 수 있습니다. 이클래스를 사용하면 무한의 수 까지 표현할 수 있습니다.

 

https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html

 

BigInteger (Java Platform SE 8 )

Immutable arbitrary-precision integers. All operations behave as if BigIntegers were represented in two's-complement notation (like Java's primitive integer types). BigInteger provides analogues to all of Java's primitive integer operators, and all relevan

docs.oracle.com

조합은 수학시간에 푼 공식을 그대로 적용시켰다. nCr = n! / (n-r)! * r!이다

package codetest;

import java.io.BufferedReader; // Scanner와 유사하지만 .Scanner에 비해 입출력 속도가 빠르다
import java.io.IOException; // BufferedReader를 사용하려면 반드시 ioException 예외처리를 해줘야한다
import java.io.InputStreamReader; //bufferedReader를 사용하기위해 임포트함
import java.util.StringTokenizer; //문자열 분리를 위해 임포트함
import java.math.BigInteger; // 무한대 범위 하지만 문자열 형태라고함

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 a = Integer.parseInt(st.nextToken()); //문자열로 받았으니 int형으로 변환
		int b = Integer.parseInt(st.nextToken());//문자열로 받았으니 int형으로 변환
		
        BigInteger n1 = BigInteger.ONE; //1로 변수 초기화
        BigInteger n2 = BigInteger.ONE; //1로 변수 초기화
        
        // nCr = n! / (n-r)! * r! 의 식을 아래 식으로 표현
        for(int i = 0; i<b; i++) { 
            n1 = n1.multiply(new BigInteger(String.valueOf(a-i))); 
            n2 = n2.multiply(new BigInteger(String.valueOf(i+1))); 
        }
        System.out.println(n1.divide(n2));
	}
}

이 코드로 문제를 통과 했다. 

'코테연습' 카테고리의 다른 글

백준 15650번 15652번 N과 M(2) N과 M(4) 문제  (0) 2022.08.31
백준 1629번 곱셈 문제  (0) 2022.08.31
백준 11053 가장 긴 증가하는 부분 수열  (0) 2022.08.31
백준 16953문제 A->B  (0) 2022.08.30
1단계: 의좋은 형제  (0) 2022.06.23

댓글