NYPC 2022 Round 2-A | 사진작가
2023. 8. 10. 20:57ㆍNYPC/NYPC 2022 Round 2-A
728x90
[문제]
개의 구조물이 좌우로 배치되어 있다.
왼쪽에서 째 구조물의 색은 이다.
사진작가 배찌는 좌우로 연속한 구조물을 사진에 담으려고 한다.
다만, 배찌는 개성 있는 사진을 찍고 싶기 때문에 사진에 색이 같은 구조물이 여러 개 있으면 마음에 들어 하지 않고, 최대한 많은 구조물을 사진에 담고 싶어 한다.
구조물의 색 정보가 주어졌을 때, 한 사진에 담을 수 있는 구조물 수의 최댓값을 구하는 프로그램을 작성하시오.
[입력 형식]
첫 줄에 구조물의 수를 나타내는 정수 이 주어진다. ()
두 번째 줄에 개의 정수 , , ⋯, 이 공백으로 구분되어 주어진다. ()
[출력 형식]
첫 줄에 한 사진에 담을 수 있는 구조물 수의 최댓값을 출력한다.
[해설]
수열에서 각 수가 들어온 횟수를 배열에 저장합니다.
수열이 조건을 만족하기 위해서는 각 수가 한번 이하로 등장해야 하므로, 배열에 저장된 값이 을 넘으면 안 됩니다.
이러한 방식으로 부분수열의 왼쪽 끝점을 고정했을 때, 가능한 오른쪽 끝점의 최댓값을 구할 수 있습니다.
한편 왼쪽 끝점이 점점 증가할 때 가능한 오른쪽 끝점의 최댓값 또한 점점 증가한다는 것을 알 수 있습니다.
그러므로 슬라이딩 윈도우를 활용해 O(N)에 문제를 해결하면 됩니다.
[C/C++ 코드]
#include <bits/stdc++.h>
using namespace std;
#define MAX 200001
int n,arr[MAX],result,mx,w;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i];
mx=max(mx,arr[i]);
}
vector<int>brr(mx+1,-1);
for(int i=0;i<n;i++){
w=max(w,brr[arr[i]]+1);
result=max(result,i-w+1);
brr[arr[i]]=i;
}
cout<<result;
}
728x90
'NYPC > NYPC 2022 Round 2-A' 카테고리의 다른 글
NYPC 2022 Round 2-A | 로봇 청소기 (1) | 2023.08.18 |
---|