프로그래밍

 3198, 1/160 회원가입  로그인  
   sunnykim97
   파이썬: 파스칼의 삼각형

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6588 [복사]


도대체 어떻게 만들어야 하는지 모르겠어요.
무슨 뜻인지도 모르겠고 어떤 방법으로 이거를 풀라는 건지도 모르겠어요.
학교 숙제인데 설명과 함께 도와주실 수 있으신가요 ㅠㅠ
코드는 제가 중간에 쓰다가 말았습니다. 다 틀렸을 거 같기도 해요 ㅠㅠ
#에 써져있는거는 선생님이 적어주신 힌트입니다.



# pascal.py: takes an integer n as command-line argument and writes
# Pascal's triangle P_n.

import stdarray
import stdio
import sys

# Get n from command line, as an int.
n = int(sys.argv[1])

# Construct a 2D ragged list a of integers. The list must have n + 1 rows,
# with the ith (0 <= i <= n) row a[i] having i + 1 elements, each initialized
# to 1. For example, if n = 3, a should be initialized to
# [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]].
a = int[stdarray.create2D(n+1,n, 0.0 )]
for i in range[a]:
    a += [a[i]]

# Fill the ragged list a using the formula for Pascal's triangle
#     a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
# where 0 <= i <= n and 1 <= j < i.
for i in range(0, n):
    for j in range(1, i):
        a[i][j] = a[i - 1][j - 1] + a[i-1][j]

# Write out the ragged list a, with elements separated by spaces, and each
# row ending in a newline.
for i in range(...):
    for j in range(..., ...):
        if j < i:
            
        else:  # end of a row
            ...

  Hit : 5362     Date : 2017/10/14 12:32



    
gaelim 음... 파이썬은 잘 모르는데요.
우선 파스칼의 삼각형이면 경우의 수 와 관련된 문제겠네요
일단
# Construct a 2D ragged list a of integers. The list must have n + 1 rows,
# with the ith (0 <= i <= n) row a[i] having i + 1 elements, each initialized
# to 1. For example, if n = 3, a should be initialized to
# [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]].

이 부분에서, 받은 n의 +1 만큼, 즉 n+1만큼 2D array를 생성하는데요 다 1로 초기화하라네요.
제가 파이썬에서 지원하는걸 잘몰라서요,
일단 이건 2중 for문을 써야할거같네요

for i=0 to i<=n
for j=0 to j<=i
a.push(1)
뭐 이렇게 하면
[[1], [1,1], [1,1,1], [1,1,1,1] ] 이렇게 나올거같구요

파스칼 삼각형이 실제로는
1
1 1
1 2 1
1 3 3 1
이렇게 생겼잖아요
근데 배열로 (파이썬에선 리스트?) 쓴다면
1
1 1
1 2 1
1 3 3 1
이런 모양이 되요 어쩃든 의도하는것처럼 만들려면

1
1 1
1 1* 1
1 1 1 1
여기서 각각 더해줘야하는데

1*을 기준으로보면 해당 i(row,행)는 2, j(column,열)는 1이에요
a[2][1] = a[1][0]+a[1][1] 이 되는거에요

근데 작성자분이 작성하신거 보니까

# Fill the ragged list a using the formula for Pascal's triangle
# a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
# where 0 <= i <= n and 1 <= j < i.
for i in range(0, n):
for j in range(1, i):
a[i][j] = a[i - 1][j - 1] + a[i-1][j]

이렇게 되있는데요 주석에도 0<=i<=n, 1<=j<i 라고 힌트가 나와있는데
작서하신거보니까 for문에 경계점이 모호하네요 (0, n) (1, i) 라고 되있으니 뭔가 부등호 한개가 잘못된거겠죠? 이부분 반드시 수정하시구요

마지막 주석부분에는
# Write out the ragged list a, with elements separated by spaces, and each
# row ending in a newline.
라고 되어있는데요

출력하라는거겠죠

일단 출력하실때는요 이런식으로 하면되요 C처럼해볼게요

for (int i=0; i<=n; i++){
for (int j=i; j<n; j++){
printf(" ");
}
for (int j=0; j<=i; j++){
printf("%d ", a[i]); // "%d " <-- 여기 스페이스 한개있으니 주의하세요 ^^;;
}
printf("\n");
}

이렇게 하면 예쁘게 나오겠네요 ^^;;
2017/10/15