문제
케이크 토핑 배열이 주어질 때, 철수와 동생이 케이크 토핑의 종류를 동일하게 나눠가질 수 있는 경우의 수를 구하는 문제
제한 사항
1 <= topping의 길이 <= 1,000,000
1 <= topping의 원소 <= 10,000
입출력 예
topping result [1, 2, 1, 3, 1, 4, 1, 2] 2 [1, 2, 3, 1, 4] 0
using System;
using System.Collections.Generic;
public class Solution {
public int solution(int[] topping) {
int answer = 0;
HashSet<int> firstTopping = new HashSet<int>();
Dictionary<int, int> secondTopping = new Dictionary<int, int>();
firstTopping.Add(topping[0]);
for (int i = 1; i < topping.Length; i++)
{
if (secondTopping.ContainsKey(topping[i])) secondTopping[topping[i]]++;
else secondTopping.Add(topping[i], 1);
}
if (firstTopping.Count == secondTopping.Count) answer++;
for (int i = 1; i < topping.Length - 1; i++)
{
int curTopping = topping[i];
firstTopping.Add(curTopping);
if ((secondTopping[curTopping] - 1) == 0) secondTopping.Remove(curTopping);
else secondTopping[curTopping]--;
if (firstTopping.Count == secondTopping.Count) answer++;
}
return answer;
}
}
if (!firstTopping.Contains(curTopping)) firstTopping.Add(curTopping);
Dictionary
문제를 풀 때는 Dictionary보다 HashSet이 더 빠른 실행 속도를 가졌는데, 다시 해보니 크게 차이 나지는 않는 것 같다.
오히려 Dictionary가 더 빠른 경우도 있고..!
이제 개인 프로젝트 야근하러...
20000...
끗!