SW Expert Academy-2005-Python

cosmos·2023년 4월 14일
0
post-thumbnail

코드

# https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5P0-h6Ak4DFAUq&categoryId=AV5P0-h6Ak4DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=2&pageSize=10&pageIndex=1
# sw expert academy, d2: 2005. 파스칼의 삼각형, python3
from typing import List  # type hint 명시용.

# 하위 구간에서 정해진 값이 나오는 패턴을 발견 -> 다이나믹 프로그래밍 알고리즘으로 접근
def solve(testcase: int) -> List[List[int]]:
    # dp table 초기화
    # 파스칼 입력 데이터를 행렬 2차원 list로 할당
    dp = [[0 for _ in range(x+1)] for x in range(testcase)]
    dp[0][0] = 1

    # DP bottom-up
    for i in range(1, testcase):
        for j in range(i+1):
            if j == 0:   # paskal 맨 왼쪽 데이터일 경우, 바로 위 맨 왼쪽 데이터 값과 동일
                dp[i][j] = dp[i-1][j]
            elif i == j:  # paskal 맨 오른쪽 데이터일 경우, 바로 위 맨 오른쪽 데이터 값과 동일
                dp[i][j] = dp[i-1][j-1]
            else:  # 맨 왼쪽 ~ 맨 오른쪽 데이터일 경우, 위에서 왼쪽과 오른쪽 숫자의 합으로 구성
                dp[i][j] = dp[i-1][j-1] + dp[i-1][j]

    return dp

if __name__ == '__main__':
    t = int(input())  # 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고,

    for index in range(1, t+1): # 그 아래로 각 테스트 케이스가 주어진다.
        print(f'#{index}')

        testcase = int(input())

        for x in solve(testcase):
            print(*x)

결과

ChatGPT Code

T = int(input())

for test_case in range(1, T+1):
    N = int(input())

    # 파스칼의 삼각형 초기화
    pascal = [[1]]

    # N행까지 파스칼의 삼각형 생성
    for i in range(1, N):
        prev_row = pascal[i-1]
        new_row = [1]

        # 이전 행의 왼쪽과 오른쪽 위의 수를 더해서 새로운 수 생성
        for j in range(1, i):
            new_row.append(prev_row[j-1] + prev_row[j])

        new_row.append(1)
        pascal.append(new_row)

    # 파스칼의 삼각형 출력
    print(f"#{test_case}")
    for row in pascal:
        print(" ".join(str(num) for num in row))

ChatGPT 문제풀이

해당 문제는 파스칼의 삼각형을 출력하는 문제입니다. 파스칼의 삼각형은 이전 행의 왼쪽과 오른쪽 위의 수를 더한 값으로 이루어져 있으며, 크기 N이 주어졌을 때 N행까지의 삼각형을 출력하면 됩니다.

출처 & 깃허브

sw expert academy
github

0개의 댓글