DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

서로 다른 구간 지우기

문제로 돌아가기

해설

어떤 값 xxx가 수열에 MMM번 등장한다고 하자. 한 번의 연산에서 지우는 구간은 모든 원소가 서로 달라야 하므로, 한 번의 연산으로 값 xxx를 두 개 이상 지울 수 없다.

따라서 값 xxx를 하나 지우려면, 같은 연산에서 xxx가 아닌 원소도 적어도 하나 같이 지워져야 한다. 전체 원소 중 xxx가 아닌 원소는 N−MN-MN−M개뿐이므로, 값 xxx의 원소는 최대 N−MN-MN−M개만 지울 수 있다. 그러므로 최종적으로 적어도

M−(N−M)=2M−NM-(N-M)=2M-NM−(N−M)=2M−N

개의 xxx가 남아야 한다.

모든 값에 대해 생각하면, MMM을 가장 많이 등장하는 값의 등장 횟수라고 할 때 정답은 적어도

max⁡(0,2M−N)\max(0,2M-N)max(0,2M−N)

이다.

이제 이 하한을 항상 달성할 수 있음을 보인다.

먼저 M>N/2M>N/2M>N/2라고 하자. 가장 많이 등장하는 값을 xxx라고 하자. 수열에 xxx가 아닌 원소가 남아 있다면, 현재 수열에는 xxx와 xxx가 아닌 원소가 인접한 위치가 반드시 존재한다. 그 두 원소는 서로 다르므로 길이 22 구간으로 지울 수 있다. 이 연산을 반복하면 가 아닌 모든 원소를 지울 수 있고, 그때마다 도 하나씩 같이 지워진다. 따라서 최종적으로 개의 만 남길 수 있다.

이제 M≤N/2M \le N/2M≤N/2인 경우를 보자. 이 경우에는 모든 원소를 지울 수 있다. 이를 현재 수열의 길이에 대한 귀납법으로 보일 수 있다.

현재 수열에서 가장 많이 등장하는 횟수를 MMM이라 하자.

  • 길이가 222라면 두 원소는 서로 달라야 하므로 한 번에 지울 수 있다.
  • 현재 길이를 nnn이라 하자. 어떤 최빈값의 등장 횟수가 충분히 작다면, 인접한 서로 다른 두 원소를 지워도 여전히 어떤 값도 절반을 초과하지 않는다. 따라서 귀납적으로 나머지를 모두 지울 수 있다.
  • 절반에 가까운 최빈값이 있는 경우에도, 그 최빈값과 다른 값이 인접한 경계가 존재한다. 이 길이 222 구간을 지우면 최빈값의 등장 횟수도 함께 줄어든다.
  • 유일하게 주의할 경우는 길이가 홀수이고, 서로 다른 두 값이 각각 (n−1)/2(n-1)/2(n−1)/2번씩 등장하는 경우이다. 이때 나머지 한 원소가 두 종류 사이에 끼어 있으면 서로 다른 세 원소로 이루어진 길이 33 구간을 지울 수 있고, 그렇지 않으면 두 최빈값이 인접한 길이 구간을 지울 수 있다. 어느 경우든 지운 뒤에는 귀납 가정을 적용할 수 있다.

따라서 M≤N/2M \le N/2M≤N/2이면 모든 원소를 지울 수 있다.

결론적으로 정답은

max⁡(0,2M−N)\max(0,2M-N)max(0,2M−N)

이다. 여기서 MMM은 수열에서 가장 많이 등장하는 값의 등장 횟수이다.

구현은 각 값의 등장 횟수를 세고 최댓값 MMM을 구하면 된다.

시간 복잡도는 O(N)O(N)O(N)이다.

2
xxx
xxx
2M−N2M-N2M−N
xxx
3
222