코딩테스트/SWExpertAcademy

파스칼삼각형 C++,Python(SW Expert Academy)

멍토 2020. 2. 5.

난이도 : D2

문제번호 : 2005

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5P0-h6Ak4DFAUq&categoryId=AV5P0-h6Ak4DFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드

 


1. 문제 설명

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

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

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

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

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

2. 문제풀이

규칙을 찾으면 금방풀수 있는 문제였습니다.

(인덱스를 이용하는것에 익숙하다면 말이죠)

 

파스칼 삼각형을 보면 제일왼쪽열과 제일위쪽행은 1입니다.

이후 다른값들은 자신의 위쪽값 더하기 위쪽왼쪽값을 더하면 됩니다.

 

이걸 코드로 풀으니 다음과 같게 되었습니다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
 
using namespace std;
// D2_1926 파스칼 삼각형
 
int main(){
    int length, a;
    cin >> length;
    for(int k=1; k<= length; k++){
        cin >> a;
        //삼각형의 크기는 10이하이므로 10X10의 배열로 잡는다.
        int pa[10][10];
        //제일왼쪽열과 제일위쪽행을 1로 초기화합니다.
        for (int i = 0; i < a; i++){
            pa[0][i] = 0;
            pa[i][0= 1;
        }
        //반복을 돌면서자신의 위쪽과 왼쪽위를 더하며 계산해 나간다.
        for(int i=1; i<a; i++){
            for(int j=1; j<a; j++){
                pa[i][j] = pa[i-1][j-1+ pa[i-1][j];
            }
        }
        //출력
        cout << "#"<<k<<endl;
        for(int i=0; i<a; i++){
            for(int j=0; j<=i; j++){
                cout << pa[i][j] << " ";
            }
            cout<<endl;
        }
    }
    return 0;
}
pascal_triangle = [[0 for _ in range(10)] for _ in range(10)]
for i in range(10):
    pascal_triangle[i][0= 1
 
 
for y in range(110):
    for x in range(110):
        pascal_triangle[y][x] = pascal_triangle[y-1][x] + pascal_triangle[y-1][x-1]
 
 
for t in range(int(input())):
    N = int(input())
    print('#{}'.format(t+1))
    for y in range(N):
        for x in range(y+1):
            print(pascal_triangle[y][x], end=' ')
        print()

댓글

💲 광고입니다.