https://school.programmers.co.kr/learn/courses/30/lessons/132265
풀이 및 소스코드
1 ≤ topping의 길이 ≤ 1,000,000이다.
문자열을 배열로 잘라서 크기를 count해나간다..면 시간이초과가 뜰 것 같다.
처음엔 한쪽에 케이크를 몰아주고 하나씩 옮겨 나가는 식으로 풀어야 한다.(✧ㅏ 닐수도..?)
딕셔너리를 생성해 일단 개수와 토핑을 count 한다.
[1, 2, 1, 3, 1, 4, 1, 2] |
라면 처음엔
형 = [1: 4, 2: 2, 3: 1, 4: 1]
동생 = []이다 앞에서 부터 하나씩 동생에게 주다보면
형 = [1: 3, 2: 2, 3: 1, 4: 1]
동생 = [1: 1]
형 = [1: 3, 2: 1, 3: 1, 4: 1]
동생 = [1: 1, 2: 1]
형 = [1: 2, 2: 1, 3: 1, 4: 1]
동생 = [1: 2, 2: 1]
여기서 형의 3은 0이되고 삭제한다
형 = [1: 2, 2: 1, 4: 1]
동생 = [1: 2, 2: 1, 3: 1] 두 딕셔너리의 개수가 같아졌으므로 + 1
형 = [1: 1, 2: 1, 4: 1]
동생 = [1: 3, 2: 1, 3: 1] 같으므로 +1
형의 4가 0이되고 삭제
형 = [1: 1, 2: 1]
동생 = [1: 3, 2: 1, 3: 1] ....
중요한건 딕셔너리의 value의 합이 아닌 딕셔너리의 key의 수의 개수.
func solution(_ topping:[Int]) -> Int {
//bro1 = 형, bro2 = 동생
var bro1 = [Int: Int]()
var bro2 = [Int: Int]()
var answer = 0
for top in topping{
bro1[top] = (bro1[top] ?? 0) + 1
}
for top in topping {
bro1[top] = (bro1[top] ?? 0) - 1
bro2[top] = (bro2[top] ?? 0) + 1
if bro1[top] == 0{
bro1.removeValue(forKey: top)
}
if bro1.count == bro2.count{
answer += 1
}
}
return answer
}