PS/문제 풀이
[프로그래머스/Swift] 132265번 - 롤케이크 자르기
시르베어
2025. 2. 4. 10:25
문제
https://school.programmers.co.kr/learn/courses/30/lessons/132265
풀이
- 입력값의 개수의 최대치가 백만개 이므로 반복문을 중첩하면 시간초과가 발생한다
- 중요한것은 토핑의 종류이기 때문에 종류에만 집중한다
전체코드
import Foundation
func solution(_ topping:[Int]) -> Int {
var result: Int = 0
var ADic: [Int:Int] = [:] // 토핑의종류:개수 - 처음에 A에는 토핑이 없기 때문에 빈 딕셔너리
var BDic: [Int:Int] = [:] // 토핑의종류:개수
// 처음엔 topping이 전부 들어있음
topping.forEach{ BDic[$0, default: 0] += 1 }
for topp in topping {
ADic[topp, default: 0] += 1
if BDic[topp] == 1 { BDic[topp] = nil } // B에 토핑이 1개면 토핑 종류에서 삭제
else { BDic[topp]! -= 1 }
//A에 담긴 종류와 B에 담긴 종류를 비교
if ADic.count == BDic.count { result += 1 }
}
return result
}