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

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

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

V-Sort

문제로 돌아가기

해설

수열의 각 위치를 정점으로 보고, 한 번에 교환할 수 있는 두 위치 사이에 무향 간선을 놓는다. 같은 연결 컴포넌트 안에서는 경로의 간선 교환을 반복하여 임의의 재배열을 할 수 있다. 따라서 각 컴포넌트의 현재 값의 멀티셋과 목표 값의 멀티셋이 같으면, 그리고 그때만 정렬이 가능하다. 위치 Ai,BiA_i,B_iAi​,Bi​의 목표 값은 모두 iii이다.

  • 서브태스크 1 (X=Y=0X=Y=0X=Y=0): 교환 가능한 위치는 Ai,BiA_i,B_iAi​,Bi​뿐이다. 두 위치의 목표 값이 모두 이므로 처음부터 모든 여야 한다. 시간에 확인한다.

X=NX=NX=N 또는 Y=NY=NY=N이면 해당 종류의 간선은 없다. 고립된 위치도 검사해야 하며, 중복 원소가 허용되므로 값의 합만 비교해서는 안 된다. 전체 풀이의 총 시간은 O(∑N)O(\sum N)O(∑N)이다. 모든 인덱스와 빈도의 절댓값은 1 000 0001\,000\,000 이하이므로 64비트 정수 범위를 넘는 연산은 필요하지 않다.

Solution written by GPT

iii
Ai=Bi=iA_i=B_i=iAi​=Bi​=i
O(N)O(N)O(N)
  • 서브태스크 2 (X=Y=1X=Y=1X=Y=1): 컴포넌트는 A1,B2,A3,B4,…A_1,B_2,A_3,B_4,\ldotsA1​,B2​,A3​,B4​,…와 B1,A2,B3,A4,…B_1,A_2,B_3,A_4,\ldotsB1​,A2​,B3​,A 두 개이다. 각 컴포넌트의 목표 값은 111부터 NNN까지가 한 번씩 나오는 멀티셋이다. 빈도로 검사하면 시간과 공간은 O(N)O(N)O(N)이다. N=1N=1N=1에서도 각각 하나의 위치인 두 컴포넌트로 해석하면 된다.
  • 서브태스크 3 (X=0X=0X=0): Y=0Y=0Y=0이면 서브태스크 1과 같다. Y>0Y>0Y>0이면 같은 인덱스의 Ai,BiA_i,B_iAi​,Bi​가 연결되고 인덱스를 YYY씩 이동할 수 있다. 따라서 인덱스가 YYY로 나눈 나머지가 같은 위치들이 한 컴포넌트이다. 각 위치 iii의 값 vvv가 (v−1) mod Y=(i−1) mod Y(v-1)\bmod Y=(i-1)\bmod Y(v−1)modY=(i−1)modY를 만족하고, 두 수열 전체에서 각 값이 정확히 두 번 나오는지 확인한다. 시간과 공간은 O(N)O(N)O(N)이다.
  • 서브태스크 4 (N≤5N\leq5N≤5): 나이브 풀이로 Floyd–Warshall 알고리즘을 사용하여 2N2N2N개 위치의 연결 여부를 모두 구한다. 각 컴포넌트의 현재 값과 목표 값을 정렬해 비교한다. 시간은 O(N3)O(N^3)O(N3), 공간은 O(N2)O(N^2)O(N2)이다.
  • 서브태스크 5 (N≤3 000N\leq3\,000N≤3000): 인접 행렬을 만들고 DFS로 컴포넌트를 구한다. 각 정점에서 가능한 모든 이웃을 살펴보고, 컴포넌트마다 빈도를 비교한다. 시간과 공간은 O(N2)O(N^2)O(N2)이다. 파일당 ∑N≤3 000\sum N\leq3\,000∑N≤3000이므로 ∑N2≤9 000 000\sum N^2\leq9\,000\,000∑N2≤9000000이다.
  • 서브태스크 6: 각 위치의 이웃은 최대 두 개이고 인덱스로 직접 계산할 수 있다. 인접 행렬 없이 반복형 DFS로 컴포넌트를 구한다. 현재 값의 빈도를 증가시키고 목표 값의 빈도를 감소시킨 뒤 모든 변경 항목이 000인지 검사한다. 컴포넌트마다 전체 빈도 배열을 초기화하지 않고, 접근한 항목만 초기화하면 시간과 공간은 모두 O(N)O(N)O(N)이다.
  • 1
    000
    000
    4​
    ,
    …