반응형
입력
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} 부분이 통하지 않는다(ㅠㅠ)
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[백준] 기본 수학 2 - 1978번 소수 찾기 (0) | 2021.03.31 |
---|---|
[백준] 기본 수학 - 2839번 설탕 배달 (0) | 2021.03.30 |
[백준] 기본 수학 - 2869번 달팽이는 올라가고 싶다 (0) | 2021.03.30 |
[백준] 기본수학 - 2292번 벌집 (0) | 2021.03.30 |
[백준] 기본 수학 - 1712번 손익분기점 (0) | 2021.03.30 |