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

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

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

절반 재배열

문제로 돌아가기

해설

틀린 위치의 집합을 M={i∣Pi≠i}M=\{i\mid P_i\ne i\}M={i∣Pi​=i}라 하고 m=∣M∣m=|M|m=∣M∣이라 하자.

m=0m=0m=0이면 답은 000이다.

1≤m≤N1\le m\le N1≤m≤N이면 답은 111이다. 모든 틀린 위치를 고르고, 부족한 수만큼 고정점을 추가로 고르면 한 번의 재배열만으로 정렬할 수 있다.

이제 m>Nm>Nm>N이라고 하자. 두 번의 재배열에서 고르는 위치 집합을 각각 A,BA,BA,B라고 하자. ∣A∣=∣B∣=N|A|=|B|=N∣A∣=∣B∣=N이므로

∣A∩B∣=∣{1,⋯ ,2N}∖(A∪B)∣|A\cap B|=|\{1,\cdots,2N\}\setminus(A\cup B)|∣A∩B∣=∣{1,⋯,2N}∖(A∪B)∣

가 성립한다. A∪BA\cup BA∪B 밖의 위치는 한 번도 선택되지 않으므로 처음부터 고정점이어야 한다.

고정점이 하나 이상 존재하면 답은 222이다. m>Nm>Nm>N이므로 한 번으로는 불가능하고, 고정점 하나를 두 재배열에서 모두 선택하지 않는 위치로 두어 항상 두 번 안에 정렬할 수 있다.

이제 고정점이 하나도 없다고 하자. 위 등식에서 A∪BA\cup BA∪B 밖에는 아무 위치도 있을 수 없으므로 A∩B=∅A\cap B=\varnothingA∩B=∅이고, A,BA,BA,B는 전체 위치를 정확히 둘로 나눈다. 첫 번째 재배열에서 선택한 위치는 두 번째 재배열에서 다시 선택되지 않는다. 따라서 첫 번째 재배열만으로 AA의 모든 위치가 제자리에 와야 한다.

순열을 사이클로 분해하자. 한 사이클의 일부 위치만 AAA에 들어가면, 그 위치들 중 적어도 하나가 필요로 하는 값은 BBB에 남게 된다. 따라서 AAA는 몇 개의 사이클 전체의 합집합이어야 한다. 반대로, 길이의 합이 정확히 NNN인 사이클들을 고를 수 있다면 그 사이클들을 첫 번째 재배열에서, 나머지를 두 번째 재배열에서 각각 정렬할 수 있다.

따라서 고정점이 없는 경우, 두 번으로 정렬할 수 있는 필요충분조건은 사이클 길이들 중 일부의 합이 정확히 NNN인 것이다. 이 조건은 부분합 DP로 O(N2)O(N^2)O(N2)에 판정할 수 있다.

그러한 부분집합이 존재하면 답은 222이고, 존재하지 않으면 답은 333이다. 실제로 두 번은 위 필요조건 때문에 불가능하다. 한편 첫 번째 재배열로 임의의 한 위치를 고정점으로 만든 뒤, 고정점이 있는 경우를 적용하면 세 번 안에는 항상 정렬할 수 있다.

따라서 답은 항상 0,1,2,30,1,2,30,1,2,3 중 하나이다. 각 테스트 케이스의 시간 복잡도는 O(N2)O(N^2)O(N2)이고, 메모리 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.6

A