Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- reactorkit
- swift existential type
- custombottomsheet
- button configuration
- swift navigationcontroller
- RxSwift
- Tuist
- swift concurrency
- uikit toast
- 버튼 피드백
- task cancellation
- custom navigation bar
- swift bottomsheet
- BFS
- 드롭다운 버튼
- swift 백준
- swift custom ui
- swift 점선
- custom ui
- UIKit
- swift dashed line
- SWIFT
- scene delegate
- task cancel
- coordinator
- swift associated type
- identifiable
- OAtuh 2.0
- DP
- swift opaque type
Archives
- Today
- Total
김경록의 앱 개발 여정
[Swift 백준] 9465 스티커 본문

https://www.acmicpc.net/problem/9465
풀이 아이디어
일정한 규칙성이 있어서 dp로 풀이했습니다.
점화식은 아래와 같습니다.
- dp[0][i] = max(dp[1][i-1], dp[1][i-2]) + board[0][i]
- dp[1][i] = max(dp[0][i-1], dp[0][i-2]) + board[1][i]
n이 1인 경우등도 잘 신경써줍니다(한번 틀림..)
자세한 풀이는 아래와 같습니다.
풀이
let t = Int(readLine()!)!
for _ in 0..<t {
let n = Int(readLine()!)!
var board = [[Int]]()
for _ in 0..<2 {
let input = readLine()!.split(separator: " ").map { Int($0)! }
board.append(input)
}
var dp = Array(repeating: Array(repeating: 0, count: n), count: 2)
dp[0][0] = board[0][0]
dp[1][0] = board[1][0]
if n == 1 {
print(max(dp[0][0], dp[1][0]))
continue
}
dp[0][1] = board[0][1] + dp[1][0]
dp[1][1] = board[1][1] + dp[0][0]
for i in 2..<n {
dp[0][i] = max(dp[1][i - 1], dp[1][i - 2]) + board[0][i]
dp[1][i] = max(dp[0][i - 1], dp[0][i - 2]) + board[1][i]
}
print(max(dp[0][n - 1], dp[1][n - 1]))
}
'Algorithm' 카테고리의 다른 글
| [Swift 백준] 11052 카드 구매하기 (0) | 2025.04.03 |
|---|---|
| [Swift 백준] 1475 방 번호 (0) | 2025.03.31 |
| [Swift 백준] 7569 토마토 (0) | 2025.03.26 |
| [Swift 백준] 1303 전쟁 - 전투 (0) | 2025.03.25 |
| [Swift 백준] 1927 최소 힙 (0) | 2025.03.14 |