관리 메뉴

Mini

백준 20922 겹치는건 싫어 c++// 투포인터 정석풀이 형식 본문

Algorithm/투포인터

백준 20922 겹치는건 싫어 c++// 투포인터 정석풀이 형식

Mini_96 2023. 11. 17. 16:35

https://www.acmicpc.net/problem/20922

 

20922번: 겹치는 건 싫어

홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열

www.acmicpc.net

1. 전체코드

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n, k,ret,temp;
vector<ll> v;
int vis[1000000 + 1];	//해당숫자 방문했는지 여부

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n>>k;
	for (int i = 0; i < n; ++i) {
		cin >> temp;
		v.push_back(temp);
	}
	//v.push_back(0);

	if (n == 1) {
		cout << 1;
		return 0;
	}


	ll e = 0, ret = 0;
	for (int s = 0; s < n; ++s) {
		//같은원소가 k개 이하인동안
		while (e < n && vis[v[e]]<k) {
			vis[v[e]]++;
			e++;
		}
		ret = max(ret, e - s);
		vis[v[s]]--;	//다음반복문위해 시작부분 숫자 카운팅--
	}
	cout << ret;
}