백준 파스칼의 삼각형

KIMYEONGJUN·2025년 5월 5일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 정수 n과 k가 빈칸을 사이에 두고 차례로 주어진다.
이 때, 1 ≤ k ≤ n ≤ 30을 만족한다.

첫째 줄에 n번째 행에 있는 k번째 수를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 표준 입력에서 데이터를 읽는다.
StringTokenizer를 사용하여 첫 줄에서 읽어온 문자열을 공백으로 분리하여 n과 k 값을 읽는다.
pascal이라는 이름의 2차원 배열을 선언합니다. n의 최대값이 30이므로 n x n 크기로 충분하다.
이 배열에 파스칼의 삼각형 각 위치의 값을 저장한다.
파스칼의 삼각형 첫 번째 행 (pascal[0][0])을 1로 초기화한다.
두 번째 행부터 n번째 행까지 반복하며 값을 계산한다.
각 행 i의 첫 번째 (pascal[i][0])와 마지막 (pascal[i][i]) 값은 1로 설정한다.
for (int j = 1; j < i; j++) 루프를 통해 각 행의 중간 값들을 계산해준다.
파스칼의 삼각형 규칙에 따라 pascal[i][j]의 값은 바로 위 행 (i-1)의 인접한 두 수인 pascal[i-1][j-1]와 pascal[i-1][j]의 합으로 결정된다.
모든 값이 계산되면, 문제에서 요구하는 n번째 행의 k번째 수는 0부터 시작하는 인덱스에서 pascal[n-1][k-1]에 해당하므로 해당 값을 출력해준다.

코드로 구현

package baekjoon.baekjoon_28;

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

// 백준 16395번 문제
public class Main1013 {
    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());

        // 파스칼의 삼각형 값을 저장할 2차원 배열
        // n번째 행에는 n개의 수가 있으므로 크기를 n x n으로 설정 (넉넉하게)
        int[][] pascal = new int[n][n];

        // 첫 번째 행 초기화
        pascal[0][0] = 1;

        // 두 번째 행부터 n번째 행까지 계산
        for (int i = 1; i < n; i++) {
            // 각 행의 첫 번째와 마지막 수는 1
            pascal[i][0] = 1;
            pascal[i][i] = 1;

            // 중간 값 계산: 위 행의 인접한 두 수의 합
            for (int j = 1; j < i; j++) {
                pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
            }
        }

        // n번째 행의 k번째 수 출력 (0-based index로 n-1번째 행의 k-1번째 값)
        System.out.println(pascal[n - 1][k - 1]);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글