본문 바로가기

개발/알고리즘

[백준] 기본 수학 - 2775번 부녀회장이 될테야

반응형
 

2775번: 부녀회장이 될테야

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

www.acmicpc.net

입력

a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다.
아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때,
주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라.
단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

출력

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

풀이

처음 문제를 봤을 때 트리 혹은 DP로 푸는 문제라고 느꼈다
1층 3호의 경우 = 0층 1호 + 0층 2호 + 0층 3호
2층 3호의 경우 = 1층 1호 + 1층 2호 + 1층 3호 
....

이 과정을 줄이면
2층 3호의 경우 = 2층 2호 + 1층 3호 로 축약할 수 있다
아파트 전체의 값을 구해 메모제이션한 다음, 요구한 테스트 케이스에 해당하는 값을 출력하자

 

Swift 전체 코드

 

    let input = Int(readLine()!)!
    var apartment : [[Int]] = []
    var array : [Int] = []

    for i in 1...14 {
        array.append(i)
    }
    apartment.append(array)
    
    for i in 1..<15 {
        apartment.append(Array.init(repeating: 0, count: 14))
        for j in 0..<14 {
            apartment[i][j] = j == 0 ? 1 : apartment[i - 1][j] + apartment[i][j - 1]
        }
    }
    
    for _ in 0..<input {
        let k = Int(readLine()!)!
        let n = Int(readLine()!)!
        print(apartment[k][n - 1])
    }

 

+ 백준에서는 guard let a else {return} 부분이 통하지 않는다(ㅠㅠ)

반응형