풀이 소요시간 : 30분
일단 문제를 살펴보면 map
을 사용해야함이 자명하다. 다만 나는 굳이 set
까지 끌어와서 사용하는 코드를 작성했는데, map.size()
메소드의 값이 산정되는 방식을 잘 알았다면 굳이 그러지 않았을 듯 하다. 해당 부분은 리팩토링하여 전체 코드를 업로드 하도록 하겠다.
map[X] = 0
이 된다고 해서 map.size()
의 크기가 줄어드는 것이 아니다. key
값을 기준으로 map.erase(key)
를 해주어야 해당 key - value
가 사라지면서 map.size()
의 감소가 발생한다.
#include <string>
#include <vector>
#include <map>
using namespace std;
map<int, int> Map;
map<int, int> Map_2;
int N;
int Size;
int Size_2;
int solution(vector<int> topping) {
N = topping.size();
for(int i = 0; i < N; i++) {
Map[topping[i]]++;
}
Size = Map.size();
//토핑의 종류 수 = Size;
int Cnt = 0;
for(int i = 0; i < N; i++) {
Map[topping[i]]--;
if(Map[topping[i]] == 0) {
Map.erase(topping[i]);
}
Map_2[topping[i]]++;
Size = Map.size();
Size_2 = Map_2.size();
if(Size == Size_2) Cnt++;
}
return Cnt;
}