๋ฌธ์
์ํ๋ ๊ธด ๋ง๋์ $N$๊ฐ์ ๊ณผ์ผ์ด ๊ฝํ์๋ ๊ณผ์ผ ํํ๋ฃจ๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ณผ์ผ์ ๊ฐ ์ข
๋ฅ์๋ $1$๋ถํฐ $9$๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด์๊ณ , ์์ชฝ๋ถํฐ ์ฐจ๋ก๋ก $S_1, S_2, \cdots, S_N$๋ฒ ๊ณผ์ผ์ด ๊ฝํ์์ต๋๋ค. ๊ณผ์ผ ํํ๋ฃจ๋ฅผ ๋ค ๋ง๋ ์ํ๊ฐ ์ฃผ๋ฌธ์ ๋ค์ ํ์ธํด๋ณด๋ ๊ณผ์ผ์ ๋ ์ข
๋ฅ ์ดํ๋ก ์ฌ์ฉํด๋ฌ๋ผ๋ ์์ฒญ์ด ์์์ต๋๋ค.
ํํ๋ฃจ๋ฅผ ๋ค์ ๋ง๋ค ์๊ฐ์ด ์์๋ ์ํ๋, ๋ง๋์ ์์ชฝ๊ณผ ๋ค์ชฝ์์ ๋ช ๊ฐ์ ๊ณผ์ผ์ ๋นผ์ ๋ ์ข
๋ฅ ์ดํ์ ๊ณผ์ผ๋ง ๋จ๊ธฐ๊ธฐ๋ก ํ์ต๋๋ค. ์์์ $a$๊ฐ, ๋ค์์ $b$๊ฐ์ ๊ณผ์ผ์ ๋นผ๋ฉด $S_{a+1}, S_{a+2}, \cdots, S_{N-b-1}, S_{N-b}$๋ฒ ๊ณผ์ผ, ์ด $N-(a+b)$๊ฐ๊ฐ ๊ฝํ์๋ ํํ๋ฃจ๊ฐ ๋ฉ๋๋ค. $(0 \le a, b;$ $a+b < N)$
์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ ๊ณผ์ผ์ ๋ ์ข
๋ฅ ์ดํ๋ก ์ฌ์ฉํ ํํ๋ฃจ ์ค์์, ๊ณผ์ผ์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ํํ๋ฃจ์ ๊ณผ์ผ ๊ฐ์๋ฅผ ๊ตฌํ์ธ์.
์ ๋ ฅ
์ฒซ ์ค์ ๊ณผ์ผ์ ๊ฐ์ $N$์ด ์ฃผ์ด์ง๋๋ค. $(1 \le N \le 200\,000)$
๋์งธ ์ค์ ํํ๋ฃจ์ ๊ฝํ ๊ณผ์ผ์ ์๋ฏธํ๋ $N$๊ฐ์ ์ ์ $S_1, \cdots, S_N$์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋๋ค. $(1 \le S_i \le 9)$
์ถ๋ ฅ
๋ฌธ์ ์ ๋ฐฉ๋ฒ๋๋ก ๋ง๋ค ์ ์๋ ๊ณผ์ผ์ ๋ ์ข ๋ฅ ์ดํ๋ก ์ฌ์ฉํ ํํ๋ฃจ ์ค์์, ๊ณผ์ผ์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ํํ๋ฃจ์ ๊ณผ์ผ ๊ฐ์๋ฅผ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ์ธ์.
ํ์ด
ํฌํฌ์ธํฐ(์ฌ๋ผ์ด๋ ์๋์ฐ?)๋ก ํ์ด์ผ ํจ์จ์ฑ์ด ์ ์ผ ์ข์ ๋ฌธ์
ํ์ฌ ๊ณผ์ผ์ ์ข ๋ฅ๊ฐ 2 ์ดํ๋ฉด ์ค๋ฅธ์ชฝ์ ์ฎ๊ฒจ์ ๊ธธ์ด๋ฅผ ๋๋ฆฌ๊ณ
2๋ฅผ ์ด๊ณผํ๋ฉด ์ผ์ชฝ์ ์ฎ๊ฒจ์ ๊ธธ์ด๋ฅผ ์ค์ธ๋ค
๋๋ ์๋์ฐ์ ์ํ ๊ฐ ๊ณผ์ผ์ ๊ฐฏ์๋ฅผ cnt ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค
(cnt[i] : i๋ฒ ๊ณผ์ผ์ ๊ฐฏ์)
๊ณผ์ผ์ ์ข ๋ฅ๋ ์๋์ฐ๋ฅผ ์ด๋์ํฌ ๋ ๋ง๋ค ๊ตฌํด์ค์ผํ๋๋ฐ,
๋งค๋ฒ cnt๋ฅผ ์ํํ๋ฉฐ ์ข ๋ฅ๋ฅผ ์ธ๋๊ฑด ๋นํจ์จ์ ์ด๋ค
๋ฐ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ฎ๊ฒจ์ cnt๊ฐ์ ๋ณํ์ํฌ ๋,
๊ทธ ๊ฐ์ด 0์ผ๋ก ๋ณํ๋ค๋ฉด -> ๊ณผ์ผ ์ข ๋ฅ ๊ฐ์,
0์์ ๋ณํ๋ค๋ฉด -> ๊ณผ์ผ ์ข ๋ฅ ์ฆ๊ฐ
์๋ ์ฝ๋์์ ๋๋ฒ๊น ๋ถ๋ถ์ ์ฃผ์์ ํ์ด์ ์์ 1์ ์ถ๋ ฅํด๋ณด๋ฉด
5
5 1 1 2 1
---
5 1
51 2
511 2
5112 3
112 2
1121 2
4
์ ๋จ๋๊ฑธ ํ์ธํ ์ ์๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
// input
int n;
cin >> n;
vector<int>v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
// solve
vector<int>cnt(10,0); // cnt[i] : i๋ฒ ๊ณผ์ผ ๊ฐฏ์
int left=0, right=0;
cnt[v[left]]++;
int fruit = 1; // ๊ณผ์ผ ์ข
๋ฅ ๊ฐฏ์
int ans = 0; // ์ต๋ ๊ณผ์ผ ๊ฐฏ์
while(right<n) {
// debug
// for(int i=left; i<right+1; i++) {
// cout << v[i];
// } cout << " " << fruit << "\n";
if(fruit>2) {
// ์ผ์ชฝ ํฌ์ธํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
cnt[v[left]]--;
if(cnt[v[left]]==0) {
fruit--;
}
left++;
} else {
ans = max(ans, right-left+1); // ์ต๋๊ธธ์ด ๊ฐฑ์
// ์ค๋ฅธ์ชฝ ํฌ์ธํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
right++;
if(cnt[v[right]]==0) {
fruit++;
}
cnt[v[right]]++;
}
}
// output
cout << ans;
return 0;
}
'๐ Cpp > [Solved.ac] Class2~4' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 17626๋ฒ: Four Squares (Silver III) (0) | 2024.11.20 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 21736๋ฒ: ํ๋ด๊ธฐ๋ ์น๊ตฌ๊ฐ ํ์ํด (Silver II) (0) | 2024.11.12 |
[BOJ][C++] ๋ฐฑ์ค 18110๋ฒ: solved.ac (Silver IV) (0) | 2024.11.08 |
[BOJ][C++] ๋ฐฑ์ค 14940๋ฒ: ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (Silver I) (0) | 2024.11.02 |
[BOJ][C++] ๋ฐฑ์ค 1676๋ฒ: ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2023.04.19 |