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

 

SW Expert Academy

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

swexpertacademy.com

 


문제

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

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

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

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

N이 4일 경우,

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

 

[제약 사항]

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

 

[입력]

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

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

 

[출력]

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

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

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 


풀이 및 해석(주석)

for tc in range(int(input())):
    N = int(input())
    result = [[1] for _ in range(N)]     # 삼각형의 정보를 리스트로 받는다.
                                         # 각 리스트의 첫 번째 값은 1이므로 일단 1을 다 넣어준다.

    for i in range(1, N):           # 0번째 리스트는 어차피 1만 있으니 그 다음부터 for문을 돌려준다.
        if i == 1:                  # N이 2인 경우 무조건 [[1], [1, 1]]이기 때문에 1만 append해주고 continue해준다.
            result[i].append(1)
            continue
        for j in range(1, i):       # 이제 각 리스트의 중간에 왼쪽위와 오른쪽위의 숫자를 더한 값을 넣어줘야 한다.
                                    # 1부터 i까지 한 이유는 인덱스 0자리에는 어차피 1이고 마지막은 1을 넣어줘야 하기때문.
            result[i].append(result[i-1][j-1]+result[i-1][j])   # 자기자리 중심으로 오른쪽, 왼쪽 위의 값을 더해 넣어준다.
        result[i].append(1)         # 마지막자리에는 항상 1을 넣어준다.
    for i in result:
        if len(i) == 1:
            print('#{}\n{}'.format(tc+1, *i))
        else:
            print(*i)

 

 


후기

삼각형의 숫자들을 2차원 리스트를 만들어 넣는다는 생각은 맞았다.

하지만, 오른쪽, 왼쪽 위의 숫자를 더한 값을 넣어줄 때 조금 복잡하게 코드를 짰던 것 같다.

다음부터는 간결하게 작성하도록 노력하자.

'SWEA' 카테고리의 다른 글

SWEA 4871 그래프 경로 DFS (파이썬)  (0) 2022.08.18
SWEA 4689 종이붙이기 (파이썬)  (0) 2022.08.18
SWEA 12712 파리퇴치3 (파이썬)  (0) 2022.08.14
SWEA 1989. 초심자의 회문 검사  (0) 2022.07.25
SWEA 2058. 자릿수 더하기  (0) 2022.07.25
복사했습니다!