[코딩테스트] ♠️ 카드 게임 - kakao 2024 winter
2025. 10. 10. 15:08ㆍ알고리즘
문제링크
난이도
레벨 3
유형
구현, DFS, 그리디?
소요시간
2시간 + 카카오 문제 해설
회고
처음에는 DFS로 경우의 수를 계산하려고 했는데 실패함. 질문 게시판을 보고 풀어봤지만 구현 실패. 카카오 해설집 보고 풀이함
일단 카드를 챙겨두고, 다음 라운드에서 카드가 필요한 경우 돈을 내는 방식을 생각해내는게 힘들었다.
코드
func solution(_ coin:Int, _ cards:[Int]) -> Int {
let n = cards.count
var head = n / 3
var coins = coin
var deck = Set<Int>()
var keep = Set<Int>()
(0..<head).forEach { deck.insert(cards[$0]) }
var round = 1
func none() -> Bool {
let copy = deck
for card in copy {
let target = n + 1 - card
if (1...n) ~= target && deck.contains(target) {
deck.remove(card)
deck.remove(target)
return true
}
}
return false
}
func oneCoin() -> Bool {
guard coins >= 1 else { return false }
for card in deck {
let target = n + 1 - card
if (1...n) ~= target && keep.contains(target) {
keep.remove(target)
deck.remove(card)
coins -= 1
return true
}
}
return false
}
func twoCoin() -> Bool {
guard coins >= 2 else { return false }
for card in keep {
let target = n + 1 - card
if (1...n) ~= target && keep.contains(target) {
keep.remove(target)
keep.remove(card)
coins -= 2
return true
}
}
return false
}
while true {
if head + 1 >= n { break }
keep.insert(cards[head])
keep.insert(cards[head+1])
head += 2
if none() || oneCoin() || twoCoin() {
round += 1
continue
}
break
}
return round
}'알고리즘' 카테고리의 다른 글
| [코딩테스트] 🗺️ 여행경로 - 백준 1976 (0) | 2025.10.13 |
|---|---|
| [코딩테스트] 🚶 인구이동 - 백준 16234 (0) | 2025.10.10 |
| [코딩테스트] 🐑 양과 늑대 - Kakao 2022 (0) | 2025.10.10 |
| [코딩테스트] 😀 이모티콘 행사 - Kakao2023 (0) | 2025.10.07 |
| [코딩테스트] 🔥 마법 상어의 파이어스톰 - BJ20058_G3 (0) | 2025.10.06 |