Notice
Recent Posts
Link
정화 코딩
[C++] 과일 탕후루 (백준 30804번) 본문
https://www.acmicpc.net/problem/30804
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int si = 0;
int ei = 0;
int maxcnt = 0;
int cnt = 0;
set<int> chk;
while (chk.size() < 2 && ei < n) {
chk.insert(a[ei]);
cnt++;
ei++;
}
maxcnt = cnt;
if (chk.size() < 2) {
cout << maxcnt << '\n';
return 0;
}
while (ei < n) {
while (chk.size() < 3 && ei < n) {
chk.insert(a[ei]);
ei++;
cnt++;
if (chk.size() == 2) {
if (cnt > maxcnt) maxcnt = cnt;
}
}
while (chk.size() > 2) {
bool exist = false;
for (int i = si + 1; i < ei; i++) {
if (a[i] == a[si]) {
exist = true;
break;
}
}
if (!exist) {
chk.erase(a[si]);
}
si++;
cnt--;
}
if (cnt > maxcnt) maxcnt = cnt;
}
cout << maxcnt << '\n';
}
처음에는 while (chk.size() > 2) 반복문에서 si + 1부터 ei - 1까지 확인하면서 현재 빼려는 수가 있는지 확인하는 로직을 안 넣어서 틀렸다. (WA) 두번째에는 while (chk.size() < 3 && ei < n) 반복문에서 chk.size() == 2인지 확인하는 로직이 없어서 또 틀렸다. (WA) 그래서 위의 코드가 최종 정답 코드이다. (AC)
'PS' 카테고리의 다른 글
[C++] IOIOI (백준 5525번) (2) | 2024.09.03 |
---|---|
[C++] DSLR (백준 9019번) (0) | 2024.08.07 |
[C++] 이중 우선순위 큐 (백준 7662번) (0) | 2024.08.06 |
[C++] 팰린드롬 이름 (백준 29768번) (0) | 2024.08.06 |
[C++] 돌다리 (백준 12761번) (0) | 2024.08.05 |
Comments