https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5P0-h6Ak4DFAUq
문제
크기가 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 |