[백준] 11051 이항 계수 2 - 재귀 & 반복문 (JAVA)

leeng·2024년 5월 7일
0

import java.io.*;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {
static BigInteger[][] answers;

public static void main(String... args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringTokenizer tokenizer = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(tokenizer.nextToken());
    int k = Integer.parseInt(tokenizer.nextToken());
    answers = new BigInteger[n+1][k+1];
    br.close();
    BigInteger result = bino(n, k) ;
    bw.write(String.valueOf(result.mod(BigInteger.valueOf(10007))));

    bw.flush();
    bw.close();
}

static BigInteger bino(int n, int k) {
    if (answers[n][k] != null) {
        return answers[n][k];
    }

    if (k == 0 || n == k) {
        answers[n][k] = BigInteger.ONE;
    } else {
        answers[n][k] = bino(n - 1, k - 1).add(bino(n - 1, k));
    }

    return answers[n][k];
}

}

반복문 ver.

public static void main(String... args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringTokenizer tokenizer = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(tokenizer.nextToken());
    int k = Integer.parseInt(tokenizer.nextToken());
    int[][] answers = new int[n+1][n+1];
    br.close();
    answers[0][0] = 1;
    for (int i = 1; i < n + 1; i++) {
        answers[i][0] = answers[i][i] = 1;
        for (int j = 1; j < i; j++) {
            answers[i][j] = answers[i-1][j] + answers[i-1][j-1];
            answers[i][j] %= 10007;
        }
    }

    bw.write(String.valueOf(answers[n][k]));

    bw.flush();
    bw.close();
}
profile
기술블로그보다는 기록블로그

0개의 댓글