본문 바로가기

Algorithm/SW Expert Academy

SWEA 2005 : 파스칼의 삼각형(D2)[파이썬]

반응형

SW Expert Academy 2005: 파스칼의 삼각형

 

SW Expert Academy

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

swexpertacademy.com

 

 


- 문제

  입력으로 N이 주어지면 N개의 줄을 가진 파스칼의 삼각형을 출력해야 한다.

 


- 풀이

T = int(input())
N = int(input())
for t in range(T):
    print("#{}".format(t+1))
    answer = []                     # 정답을 담아야 함
    for i in range(N):
        temp = []                   # 파스칼의 한 줄
        for j in range(i+1):
            if j == 0 or j == i:    # 한 줄에서 첫번째 혹은 마지막은 무조건 1
                temp.append(1)      
            else:
                temp.append(answer[i-1][j] + answer[i-1][j-1])  # i-1, 즉 이전 줄의 두개를 합친게 이번 줄의 숫자가 됨
        answer.append(temp)
    for i in answer:
        print(*i)                   # asterisk를 사용하는 방법 중 하나로 리스트 안의 내용만 빼다 쓸 수 있다.

   재귀함수를 이용하는 방법도 있는데, 재귀함수를 이용할 시에 시간이 너무 많이 소요되므로 반복문을 이용해서 풀어봤다. answer라고 정답을 저장할 리스트를 만들고 한 줄마다 내용을 저장해서 answer에 append해주는 방식으로 진행한다. 한 줄에서 첫 번째 숫자와 마지막 숫자는 언제나 1이므로 if j == 0 or j == i를 넣어주고, 이러한 경우를 제외하고는 언제나 이전 줄의 2개의 합이 현재 숫자가 되므로 그 부분을 넣어준다.

 

print(*i) : *(asterisk)을 이렇게 사용할 수 있는줄 몰랐다. 

for i in answer:

   print(i)를 하면

[1]

[1, 1]

[1, 2, 1]

이런 방식으로 나오는데, asterisk를 사용해서

for i in answer:

   print(*i)를 하면ㅁ

1

1 1

1 2 1

와 같은식으로 출력된다.


- 기억할 것!

- asterisk를 사용하는 방법으로는 4가지가 있다.

 

- 리스트를 append해서 사용하고 i-1이랑 j-1에 접근하는 만큼 리스트의 크기를 벗어난 부분을 인덱싱하지 않도록 조심해야 한다.

 

반응형