Algorithm/DP

[백준 2775번] 부녀회장이 될테야

킹우현 2023. 3. 13. 13:49

# 1 3 6 10
# 1 2 3 4

def dynamic(data):
    floor = data[0]
    index = data[1]

    dp = [[0] * (index+1) for _ in range(floor+1)]
    
    for i in range(1,index+1):
        dp[0][i] = i
    
    for i in range(1,floor+1):
        for j in range(1, index+1):
            if j == 1:
                dp[i][j] = 1
            else:
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
    return dp[floor][index]

t = int(input())

data = [[0]*2 for _ in range(t)]

for i in range(t):
    for j in range(2):
        data[i][j] = int(input())

for i in data:
    print(dynamic(i))

이번 문제는 다음 조건에 맞게 각 테스트 케이스마다 주어진 k(층 수), n(호 수)에 몇 명이 사는지 구하는 문제이다.

 

“a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다”

 

본인은 0층부터 1층까지의 값을 구하던 중, dp[i][j] = dp[i-1][j] + dp[i][j-1] 이라는 점화식을 도출할 수 있었고, DP 2차원 리스트를 활용하여 간단하게 풀이할 수 있던 DP문제였다 :)

 

 

'Algorithm > DP' 카테고리의 다른 글

[백준 11726번] 2xn 타일링  (0) 2023.03.14
[백준 1003번] 피보나치 함수  (0) 2023.03.13
[백준 9095번] 1, 2, 3 더하기  (0) 2023.03.10
[백준 2156번] 포도주 시식  (0) 2023.03.08
[백준 12865번] 평범한 배낭  (0) 2023.03.08