Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 2775번 : 부녀회장이 될테야 (Python/구현/Bronze 1)

dev스카이 2024. 10. 15. 13:27

[문제 링크] 👉 https://www.acmicpc.net/problem/2775


설명

아파트 a층 b호에 거주하려면 (a - 1)층의 1호부터 b호까지의 사람들 수의 합만큼 데리고 와야 한다.

이 아파트는 0층부터 있고 1호부터 있다. 0층에는 i호 = i명이 사는데, 1호에는 1명, 2호에는 2명씩 산다는 말이다.

모든 거주자들이 위 조건을 모두 만족하고 거주하고 있다고 했을 때 a층 b호에는 총 몇 명을 데리고 와야 하는지 출력해야 한다.

 

풀이

2층 3호의 사람 수를 구해야 할 때

  1호 2호 3호
2층 1명 (1+3) = 4명 (1+3+6) = 10명
1층 1명 (1+2) = 3명 (1+2+3) = 6명
0층 1명 2명 3명

 

 

0층은 사람 수가 일정하므로 먼저 0층의 3호까지의 사람 수를 저장한다.

ho = [i for i in range(1, n + 1)]

 

 

다음으로, 1층 2호부터 사람 수를 저장한다. 아래 코드와 같이 저장하면 아래와 같은 표가 된다.

for i in range(1, f + 1): 
    for j in range(1, n): 
        ho[j] += ho[j - 1]

 

  1호 j = 1일 때(2호) j = 2일 때(3호)
i = 2일 때(2층) 1 ho[1] = h[1] + h[0] ➜  3 + 1 = 4
➜ ho[1, 4, 6]
ho[2] = h[2] + h[1] ➜  6 + 4 = 10
➜  ho[1, 4, 10]
i = 1일 때(1층) ho[0] = 1 ho[1] = h[1] + h[0] ➜ 2 + 1 = 3
➜ ho[1, 3, 3]
ho[2] = h[2] + h[1] ➜  3 + 3 = 6
➜ ho[1, 3, 6]
0층 ho[0] = 1 ho[1] = 2 ho[2] = 3

 

 

마지막으로, 3호의 인덱스는 2이기 때문에 n - 1 인덱스를 출력한다.

print(ho[n - 1])

 

 

Solution

t = int(input()) #테스트 케이스
for _ in range(t):
    f = int(input())
    n = int(input())
    ho = [i for i in range(1, n + 1)] #0층, n호까지 사람수 저장

    for i in range(1, f + 1): #1층부터 f층까지
        for j in range(1, n): #1호부터 n호까지
            ho[j] += ho[j - 1]
    print(ho[n - 1])

 

 

👩‍💻 회고

자바로 풀다가 다시 파이썬으로 돌아왔다. 자바로 다시 시작하기엔 시간이 다소 부족하다고 판단했다. 오랜만에 파이썬으로 푸는건데도 기억은 다 난다.