본문 바로가기
C++ 알고리즘

SWEA D2 2005 파스칼의 삼각형

by hoshi03 2024. 10. 11.

크기가 N인 파스칼의 삼각형을 만들어야 한다.

파스칼의 삼각형이란 아래와 같은 규칙을 따른다.

1. 첫 번째 줄은 항상 숫자 1이다.

2. 두 번째 줄부터 각 숫자들은 자신의 왼쪽과 오른쪽 위의 숫자의 합으로 구성된다.

N이 4일 경우,
 


N을 입력 받아 크기 N인 파스칼의 삼각형을 출력하는 프로그램을 작성하시오.


[제약 사항]

파스칼의 삼각형의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)


[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 N이 주어진다.


[출력]

각 줄은 '#t'로 시작하고, 다음 줄부터 파스칼의 삼각형을 출력한다.

삼각형 각 줄의 처음 숫자가 나오기 전까지의 빈 칸은 생략하고 숫자들 사이에는 한 칸의 빈칸을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
입력1
4
 
 
출력#1
1
1 1
1 2 1
1 3 3 1
 

 

• 풀이

 

별찍기 문제같은 느낌으로 접근

j가 0인경우랑 대각선(i==j)는 무조건 1이고

그 아닌경우는 문제상으로는 좌상단, 우상단의 합이 현재 인덱스의 값이라고 햇는데

배열 상으로는 좌상단과 상단을 더해주는 값으로 넣으면 되었다

#include <iostream>
#include <vector>
using namespace std;


int main () {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int t;
    cin >> t;
    for(int T = 1; T <= t; T++){
        int n;
        cin >> n;
        vector<vector<int>> arr(n,vector<int>(n,0));

        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(i == j || j == 0) arr[i][j] = 1;
                else{
                    int tmp = 0;
                    if (i-1 >= 0){
                        if (j-1 >= 0) tmp += arr[i-1][j-1];
                        tmp += arr[i-1][j];
                        arr[i][j] = tmp;
                    }
                }
            }
        }

        cout << "#" << T << '\n';

        for(int i = 0; i < n; i++){
            for(int j = 0; j <= i; j++){
                cout << arr[i][j] << " ";
            }
            cout << '\n';
        }
    }
}

'C++ 알고리즘' 카테고리의 다른 글

SWEA D2 1959. 두 개의 숫자열  (0) 2024.10.12
SWEA D2 1961. 숫자 배열 회전  (4) 2024.10.11
SWEA D2 1926 간단한 369  (0) 2024.10.10
SWEA D2 1954 달팽이 숫자  (0) 2024.10.10
프로그래머스 폰켓몬(해쉬)  (1) 2024.09.30