[문제 링크] 👇
풀이 방법
💡 규칙을 보자
맨 처음과 맨 끝은 항상 1이다.
가운데 숫자는 인덱스와 일치한데, 그 수의 개수는 인덱스 - 1 과 일치하다.
이 규칙을 참고해서 리스트에 append() 하고 출력한다.
Solution
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
N = int(input())
print(f"#{test_case}")
print(1)
for i in range(1, N):
pascal = [0]
pascal[0] = 1
for j in range(i - 1):
pascal.append(i)
pascal.append(1)
print(*pascal)
개선할 점
코드를 개선해 파스칼의 삼각형을 더 효율적으로 생성할 수 있다. 현재 코드는 삼각형의 각 줄을 수동으로 초기화하려 하므로, 각 숫자의 값을 정확히 계산하지 못할 수 있다. 아래의 접근 방법은 파스칼의 삼각형의 각 행을 이전 행의 값을 활용해 효율적으로 생성한다.
- 삼각형 데이터 구조 사용 : 각 줄을 triangle에 저장해 반복문을 통해 필요한 값에 접근
- 이전 줄 값 참조 : 현재 줄의 요소들은 이전 줄의 값을 이용하여 생성되므로 매번 새로 계산하지 않는다.
- 깔끔한 출력 : *row로 각 행을 간결하게 출력하여 결과가 보기 쉽게 나온다.
개선된 코드
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
N = int(input())
print(f"#{test_case}")
# 파스칼의 삼각형 초기화
triangle = [[1]] # 첫 번째 줄은 항상 [1]
for i in range(1, N):
row = [1] # 각 줄의 첫 번째 요소는 항상 1
# 이전 줄을 참조하여 현재 줄의 값을 계산
for j in range(1, i):
row.append(triangle[i-1][j-1] + triangle[i-1][j])
row.append(1) # 각 줄의 마지막 요소는 항상 1
triangle.append(row) # 삼각형에 현재 줄 추가
# 출력
for row in triangle:
print(*row)
👩💻 회고
쉽게 생각하면 풀리는 문제였다. 원래 내 풀이와 개선된 코드를 비교해보면 실행 시간에서 차이가 난다. 이 문제를 풀면서 내가 봐도 약간 불필요하게 초기화를 하고 있다거나, 반복문을 돌릴 때마다 출력을 하고 있어서 효율적으로 좋은 코드는 아닐거라 생각은 했다.
'SWEA' 카테고리의 다른 글
[SWEA] 5789. 현주의 상자 바꾸기 (Python/D3) (1) | 2024.11.13 |
---|---|
[SWEA] 1940. 가랏! RC카! (Python/D2) (0) | 2024.11.10 |
[SWEA] 20551. 증가하는 사탕 수열 (Python/D3) (0) | 2024.11.08 |
[Programmers] L1. 기사단원의 무기 (Python) (2) | 2024.11.07 |
[SWEA] 4676. 늘어지는 소리 만들기 (Python/D3) (0) | 2024.11.04 |