[Algorithm] 혼자 놀기의 달인
Closed this issue · 0 comments
hwangJi-dev commented
💬 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131130?language=swift
💬 Idea
- cardDict에
순서 - 카드 숫자
를 저장해놓는다. - 이후 첫번째 key부터 그룹지을 수 있는 만큼 (해당 숫자가 열려있을 때까지) 반복하면서 각 그룹을 찾아 ans에 그 개수를 저장한다.
- ans를 내림차순 정렬한 뒤
- 그룹 개수가 2개 이상이라면 최댓값, 그다음 최댓값을 곱한 숫자를 return한다
- 그룹 개수가 2개 미만이라면 0을 return한다.
💬 풀이
import Foundation
func solution(_ cards:[Int]) -> Int {
var cardDict: [Int: Int] = [:]
for (idx, i) in cards.enumerated() {
cardDict[idx + 1] = i
}
var ans: [Int] = []
func cycle(_ start: Int) -> Int {
var queue: [Int] = []
var start = start
while cardDict[start] != nil {
let next = cardDict[start]!
queue.append(start)
cardDict.removeValue(forKey: start)
start = next
}
return queue.count
}
while !cardDict.isEmpty {
ans.append(cycle(cardDict.keys.first!))
}
ans = ans.sorted(by: >)
return ans.count >= 2 ? ans[0] * ans[1] : 0
}