2005 파스칼의 삼각형

Sungmin·2023년 10월 30일
0

SWEA 알고리즘

목록 보기
10/26

파스칼의 삼각형

내 풀이

import java.io.*;

public class SW2005 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        for (int t = 1; t <= T; t++) {
            int N = Integer.parseInt(br.readLine());
            int[] before = new int[N+1];
            int[] after = new int[N+1];
            System.out.println("#" + t);

            for (int i = 0; i < N; i++) {
                for (int j = 0; j <= i; j++) {
                    if (j == 0) {
                        after[j] = 1;
                    } else {
                        after[j] = before[j-1] + before[j];
                    }
                }
                for (int k = 0; k < N; k++) {  
                    if (after[k] != 0) {
                        before[k] = after[k];
                        System.out.print(before[k]);
                    } else {
                        break;
                    }
                    System.out.print(" ");
                }
                System.out.println();
            }
        }
    }    
}

Solution

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        for (int t = 1; t <= T; t++) {
            int N = Integer.parseInt(br.readLine());
            int[][] arr = new int[N+1][N+1];
            System.out.println("#" + t);

            arr[0][0] = 1;
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= i; j++) {
                    arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
}

더 나은 Solution

import java.io.*;

class Solution {
        public static void main(String[] args) throws IOException{
            BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
            for(int t=1;t<=T;t++){
                int n = Integer.parseInt(br.readLine());
                StringBuilder sb = new StringBuilder();
                int[][] arr = new int[n+1][n+1];
                arr[0][0] = 1;
                
                for(int i=1;i<=n;i++){
                    for(int j=1;j<=i;j++){
                        arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
                        sb.append(arr[i][j]+" ");
                    }
                    sb.append('\n');
                }
                System.out.println("#"+t);
                System.out.print(sb);
            }
        }
}

배운점

먼저 내 풀이를 설명하자면 한줄씩 출력하는 방식으로 풀이하였다.
1차원 배열에 이전 행과 현재 행을 나눠서 매번 업데이트 해 주는 방식이다.

풀이에는 성공했지만 더 나은 코드가 궁금해서 찾아본 결과 arr[N+1][N+1] 크기의 2차원배열을 생성하여 그래프방식으로 푸는 간단한 문제라는 것을 알게 되었다.

또한, 코드를 한 단계 더 최적화 하기위해 StringBuilder를 적용하였다.
블로그에서 StringBuilder를 사용해 푸는것을 몇번 봤는데 정확히 언제 어떻게 사용하는지는 알지 못하였으나, 이번 기회에 확실히 알고 다른 풀이 때 적용해 보도록 하겠다.

profile
Let's Coding

0개의 댓글