●문제

●입출력

문제풀이
topping에서 주어진 숫자의 배열을 2등분해서 주어진 숫자의 종류가 같아질때 answer을 증가
같아질수없다면 0을 return
푼방법
map과 set을 사용하여
map<int, int> a와 b를 선언
b에다가 몰빵한뒤 a에다가한개씩 주면서 b에서 준만큼 감소
만약 더이상 토핑이 없다면 erase
a.size()와 b.size()가 같다면 answer++
#include <string>
#include <vector>
#include <set>
#include <map>
using namespace std;
int solution(vector<int> topping)
{
//[1, 2, 1, 3, 1, 4, 1, 2]
//[1, 2, 1, 3 | 1, 4, 1, 2] -> set의 경우 1ㅡ2ㅡ3 총 3 / 1-2-4 총 3가지
//[1, 2, 1, 3, 1 | 4, 1, 2]
int answer = 0;
map<int, int> a;
map<int, int> b;
for (int i = 0; i < topping.size(); i++)
{
b[topping[i]]++;
}
for (int i = 0; i < topping.size(); i++)
{
b[topping[i]]--;
a[topping[i]]++;
if (b[topping[i]] == 0)
b.erase(topping[i]);
if (a.size() == b.size())
answer++;
}
return answer;
}
난이도 : 2
점수 : 2
'C++ 프로그래머스 > 기타 문제' 카테고리의 다른 글
| 프로그래머스(C++) - 방문 길이 (0) | 2025.10.24 |
|---|---|
| 프로그래머스(C++) - 행렬의 곱셈 (0) | 2025.10.20 |
| 프로그래머스(C++) - 예상 대진표 (0) | 2025.10.12 |
| 프로그래머스(C++) - 영어 끝말잇기 (0) | 2025.10.12 |
| 프로그래머스(C++) - 귤 고르기 (0) | 2025.10.10 |
