arr=[]
   
for i in range(15):
    arr.append([0]*14)
   
arr[0]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]
   
for i in range(1,15):
    for j in range(14):
        arr[i][j]=arr[i-1][j]+arr[i][j-1]

t=int(input())

for _ in range(t):
    k=int(input())
    n=int(input())
   
    print(arr[k][n-1])

 

#

이차원 리스트를 구현하는 게 익숙하지 않아서 힘들었다.

 

#

일단 arr이라는 리스트에다가 0이 14개 씩 들어있는 리스트를 15개 추가했다. 

 

이유는 층수는 0층부터 14층, 호수는 1호부터 14호까지 있다고 했기 때문이다.

 

 

0층 호수에 사는 사람의 수는 문제에서 알려주었으므로

 

arr[0]은 1호부터 14호까지, 1~14가 들어간 리스트로 만들어준다.

 

 

 

이제 1층부터 14층까지의 arr[i][j]즉 거주민 수를 구하는 공식은

arr[i][j]=arr[i-1][j]+arr[i][j-1]이다. 

 

바로 아래층 같은 호수에 사는 사람 수

+ 아랫층 1호부터 바로 전 호수까지 사는 사람 수의 합(==같은 층의 전 호수, 옆집에 사는 사람 수)

 

 

그다음에 입력값 받아서 출력을 하면 되는데 왜 arr[k][n]이 아니라 arr[k][n-1]을 출력한 걸까?

 

0번째부터 시작하는 리스트의 관점에서는 n호가 n-1호이기 때문. 

ex) 3호 = 세번째 집= arr[k][2]

 

그래서 n-1로 쓰면 딱 정확하다.

 

 

 

이게 최선일 리가 없는데 다른 사람들이 푼 건 아직 못 살펴봤다.

 

 

'알고리즘 PS > DP' 카테고리의 다른 글

백준 #26529 Bunnies  (0) 2023.09.04
다이나믹 프로그래밍이란?  (0) 2023.09.03
백준 #17202 핸드폰 번호 궁합  (0) 2023.09.03
백준 #2748 피보나치 수 2  (0) 2023.09.03
백준 #24416 알고리즘 수업-피보나치 수 1  (0) 2023.09.03

+ Recent posts