Skip to content

[Algorithm] 혼자 놀기의 달인 #231

Description

@hwangJi-dev

💬 문제

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{varcardDict:[Int:Int]=[:]for(idx, i)in cards.enumerated(){cardDict[idx +1]= i
}varans:[Int]=[]func cycle(_ start:Int)->Int{varqueue:[Int]=[]varstart= start
whilecardDict[start]!=nil{letnext=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}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions