[프로그래머스] 롤케이크 자르기

이창형·2023년 5월 8일
0

코드

import Foundation

func solution(_ topping:[Int]) -> Int {
    var setOne = Set<Int>()
    var answer = 0
    // 딕셔너리로 토핑의 갯수와 토핑당 갯수가 몇개인지 확인
    var dic = [Int:Int]()
    
    for i in topping {
        if dic[i] == nil {
            dic[i] = 1
        } else {
            dic[i]! += 1
        }
    }
    
    // 토핑 순서대로 dic에서는 토핑을 빼고 setOne에 토핑 대입
    topping.forEach {
        dic[$0]! -= 1
        setOne.insert($0)
          
        if dic[$0]! <= 0 {
            dic.removeValue(forKey: $0)
        }
        // 두개의 갯수를 비교하여 같으면 정답에 +1
        if dic.count == setOne.count {
          answer += 1
        }
      }
    
    
    return answer
}

회고

  • 처음에는 두개의 세트를 비교해서 중복 for문을 돌려 모든 경우의 수를 비교하려 했다가 시간 초과가 떴습니다
  • 새로 짠 코드도 완전탐색은 맞지만 딕셔너리를 이용하여 시간을 줄여 통과하였습니다
profile
iOS Developer

0개의 댓글