[백준/JAVA] 31474번 양갈래 짝 맞추기

정은아·2024년 3월 5일

[알고리즘] 수학 모음

목록 보기
47/152
post-thumbnail

문제

내 풀이 1 : 예제 탈락 - 날로 먹으려다 실패

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

public class Main extends Exception {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(br.readLine());
        BigInteger nFac = BigInteger.valueOf(1);
        BigInteger rFac = BigInteger.valueOf(2);
        BigInteger nMinr = BigInteger.valueOf(1);

        for (int i = 1; i <= num; i++) {
            nFac = nFac.multiply(BigInteger.valueOf(i));
        }

        for (int i = 1; i <= num - 2; i++) {
            nMinr = nMinr.multiply(BigInteger.valueOf(i));
        }

        BigInteger answer = nFac.divide((rFac.multiply(nMinr))).divide(BigInteger.valueOf(2));
        sb.append(answer);
        System.out.println(sb.toString());


    }
}

내 풀이 2 : 경우의 수 계산 - 정답

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

public class Main extends Exception {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(br.readLine());
        num /= 2;

        BigInteger answer = BigInteger.valueOf(1);

        for (int i = 1; i <= num*2-1; i+=2) {
            answer = answer.multiply(BigInteger.valueOf(i));
        }

        sb.append(answer);
        System.out.println(sb.toString());
    }
}

느낀점

num이 2일 때는 1, 4일때는 3이 나왔다.
6일때는? 53의 답을 가지므로 15
8일때는? 7
5*3의 답을 가져서 105
중복을 제거해야하므로 num을 2로 나눠서 2,4,6,8을 1,2,3,4로 바꿔서 게산했다.
그 후 그냥 홀수가 하나씩 추가돼서... 그렇게 계산했다.
수가 어마어마하게 커지므로 답은 Biginteger로 받는다.

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글