파이썬의 자료구조 - 조합 문제풀이

조합 문제풀이 (백준 온라인 저지 2775번)

조합 개념 정리 (DP 테이블)

  • 다이나믹 프로그래밍(Dynamic Programming, DP) 알고리즘

메모리 공간을 약간 더 사용하면서 연산 속도를 비약적으로 증가시킬 수 있는 기법

이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다.

다이나믹 프로그래밍의 구현은 일반적으로 탑다운(top-down) 방식과 보텀업(bottom-up) 방식

조건

  • 다이나믹 프로그래밍은 다음 조건들을 만족할 때 사용할 수 있다.

  • 큰 문제를 작은 문제로 나눌 수 있고 그 작은 문제의 답을 모에서 큰 문제를 해결할 수 있는 경우

  • 동일한 작은 문제를 반복적으로 해결해야하는 경우

78번 조합 설계

import sys
input = sys.stdin.readline
D = [[0 for j in range(15)] for i in range(15)]

for i in range(1,15) : # 리스트 초기화
    D[i][1] = 1 # i층의 1호는 항상 1의 값을 지니기 때문에 초기화할 수 있음
    D[0][i] = i # 0층의 i호는 i의 값을 지니도록 문제에서 주어짐

for i in range(1,15) :
    for j in range(2, 15) :
        D[i][j] = D[i][j-1] + D[i-1][j] # 일반화된 점화식

T = int(input()) # 테스트 케이스

for i in range(0, T) :
    K = int(input()) # 층수 입력
    N = int(input()) # 호수 입력
    print(D[K][N])

Categories:

Updated:

Comments