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 | 29 | 30 |
Tags
- identifiable
- reactorkit
- swift concurrency
- DP
- UIKit
- RxSwift
- coordinator
- swift dashed line
- 타임라인 포맷팅
- custombottomsheet
- paragraph style
- traits
- task cancel
- swift 점선
- Tuist
- task cancellation
- SWIFT
- swift navigationcontroller
- swift bottomsheet
- uikit toast
- claen architecture
- custom navigation bar
- custom ui
- swift 백준
- BFS
- button configuration
- swift custom ui
- tusit font 추가 방법
- rxdatasources
- domain data
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 |