본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 2775번 부녀회장이 될테야, 파이썬

by Godgil 2020. 4. 3.

백준 알고리즘 2775번 부녀회장이 될테야, 파이썬

 

이번 문제는 백준 알고리즘의 2775번 부녀회장이 될테야. 문제이다.

파이썬으로 풀어보았다.

문제를 대충 설명하면 아파트의 거주 조건이 A층의 B호에 살려면 A-1층에서 B호까지 있는 사람들 수의 합만큼 데려와 살아야한다. 또, 0층의 i호에는 i명의 사람이 살고 있다.

 

이게 이렇게 보면 뭔말인가.. 싶겠지만 대충 표로 정리하면 한 눈에 보인다.

 

4층 1 6 21 56 126 252
3층 1 5 15 35 70 126
2층 1 4 10 20 35 56
1층 1 3 6 10 15 21
0층 1 2 3 4 5 6
  1호 2호 3호 4호 5호 6호

그러니까 예를 들어서, 빨갛게 표시 해 놓은 2층의 3호에 살려면 1층의 1호부터 3호까지있는 1 + 3 + 6 의 수 만큼 데려와 라는 소리다.

 

근데 이렇게 표로 만들어보니까 잘 보면 규칙이 있다.

바로 아래층의 전부를 더할 필요 없이, (바로 왼쪽 옆집 + 바로 아랫집)을 하면 수가 나온다.

 

위의 계산을 대충 점화식?으로 만들어보면 (h,n) = (h,n-1) + (h-1,n)이 된다. 이걸 알고 문제로 들어가자.

 

문제의 조건은 위에 다 나와있으니, 문제에 대한 내 생각이다.

#생각 1. 점화식을 구했으니, 이제 이차원 배열을 만들어서 그냥 처음부터 다 채워버리는게 좋을 것 같다.

#생각 2. 층 수는, 0층부터 14층까지 있고, 호수는 1호부터 14호까지있다. 왜냐면 문제 조건에 그렇게 나와있다.

#생각 3. 0층에 i호는 i명은 기본 조건, 각 층의 1호는 1명인것도 기본 조건 이 두개를 합쳐서 순차적으로 리스트를 채워나가면된다.

 

위처럼 생각을 하고 나는 코드를 짜 내려갔다.

 

 

 

 

 

내 코드이다.

lst = [[0 for j in range(14)] for i in range(15)]
for i in range(15):
    lst[i][0] = 1
for h in range(14):
    lst[0][h] = h+1
for i in range(1,15):
    for j in range(1,14):
        lst[i][j] = lst[i][j - 1] + lst[i - 1][j]

Test_case = int(input())
for i in range(Test_case):
    k = int(input())
    n = int(input())
    print(lst[k][n-1])

보면 알겠지만, 그냥 다 채우고나서 그 부분을 바로 받아오는 형식으로 코드를 썼다.

규칙을 찾는데 시간이 좀 걸렸지만, 푸는 방법은 되게 쉬웠다.

계차수열로 풀려고 들면 이거 머리 되게 아플 수도 있다.

이제 수학1 단계도 얼마 남지 않았다. 매일매일 조금씩 하다보면 언젠간 다 풀 날이 올거같다.

 

 

문제 출처

https://www.acmicpc.net/problem/2775

 

2775번: 부녀회장이 될테야

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1 <= k <= 14, 1 <= n <= 14)

www.acmicpc.net

 

댓글