https://www.acmicpc.net/problem/13144
๋ฌธ์ ๋ณด์๋ง์ ์กฐํฉ ๋ฌธ์ ์ธ ์ค ์๊ณ , ์ด๋ป๊ฒ ํ์ดํด์ผ ํ๋์ง ๊ฐ์ด ์์์๋๋ฐ ์ค๋ณต์ด ์๋ ์ฐ์ ์์ด์ ์ฐพ๋ ํฌ ํฌ์ธํฐ ๋ฌธ์ ์๋ค.
start ํฌ์ธํฐ์ end ํฌ์ธํฐ๋ก ์ํํ๋ฉด์ ํ์
์์ด์ด 1 2 3 1 2์ธ ๊ฒฝ์ฐ, ๊ฐ๊ฐ ์ค๋ณต์ด ์๋ ๊ตฌ๊ฐ์
1 2 3
1 2
1 2 3 1
2
1 2 3 1 2
1 2 3 1 2
1 2 3 1 2
๊ฒฐ๊ณผ๊ฐ์ ๊ฐ ๊ฒฝ์ฐ์ end-start๋ฅผ ๋ํ๋ค.
start=0, end=3์ธ ๊ฒฝ์ฐ,
1
1 2
1 2 3
์ธ ๊ฐ์ง์ ์์ด์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ
๐์ฝ๋ ๋ก์ง์ ๋ณด๋ฉด 1 2 3
๊ตฌ๊ฐ์ ๊ฒฝ์ฐ, end๋ 3๊น์ง ์ฆ๊ฐํ๊ณ break๋ฌธ์ผ๋ก ๊ฐ
โ ๏ธstart๊ฐ 0 1 2 ์์ผ๋ก ์ฆ๊ฐํ๋ฉฐ for๋ฌธ ๋ ๋, end๊ฐ ๊ธฐ์กด ๋ฒ์๋ณด๋ค ์์์ง๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก end๋ฅผ ์ด๊ธฐํํ์ง๋ ์์๋ ๋จ
#include <iostream>
using namespace std;
int arr[100001];
bool visited[100001];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
int end = 0;
long res = 0;
for (int st = 0; st < N; st++) {
while (end < N) {
if (visited[arr[end]]) break;
visited[arr[end]] = true;
end++;
}
res += end - st;
visited[arr[st]] = false;
}
cout << res;
}