반응형
문제
풀이
토핑 최대 개수가 백만개이기 때문에, 시간복잡도에 유의해야 한다.
루프를 여러번 돌면 시간초과가 나므로, 처음 top2 확인에 1번, 토핑 전체 검사 후 answer 증가에 1번 루프를 돈다.
먼저 토핑 전체를 검사해서, 서로 다른 토핑의 개수를 top2에 저장한다.
그 후에 토핑을 하나하나 확인해서, top1에 없는 토핑이라면 top1을 늘려준다.
top2에 토핑이 없어지면 top2를 1감소시킨다.
top1와 top2가 같다면 answer를 1증가시킨다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <string>
#include <vector>
using namespace std;
bool top1Check[10001];
int top2Cnt[10001];
int top1 = 0;
int top2 = 0;
int solution(vector<int> topping) {
for (int i = 0; i < topping.size(); i++)
{
if(top2Cnt[topping[i]] == 0)
{
top2++;
}
top2Cnt[topping[i]]++;
}
int answer = 0;
for (int i = 0; i < topping.size(); i++)
{
int curTop = topping[i];
if (top1Check[curTop] == false)
{
top1Check[curTop] = true;
top1++;
}
top2Cnt[curTop]--;
if(top2Cnt[curTop] == 0)
{
top2--;
}
if (top1 == top2)
{
answer++;
}
}
return answer;
}
|
cs |
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 131130] 혼자 놀기의 달인 C# (0) | 2023.11.07 |
---|---|
[프로그래머스 132266] 부대복귀 C++ (0) | 2022.11.21 |
[프로그래머스 131127] 할인 행사 C++ (0) | 2022.11.04 |
[프로그래머스 42898] 등굣길 C++ (0) | 2021.11.20 |
[프로그래머스 43105] 정수 삼각형 C++ (0) | 2021.11.20 |