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

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

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

두 원소 바꾸기

문제로 돌아가기

해설

순열의 인버전 수를 생각하자. 연산에서 실제로 자리를 바꾸는 두 원소의 값을 x<yx<yx<y라고 하자. xxx와 yyy는 고른 구간에서 가장 작은 원소와 두 번째로 작은 원소이므로, 두 위치 사이에 있는 모든 원소는 yyy보다 크다. 따라서 이 중간 원소들과 x,yx,yx,y가 만드는 인버전의 총수는 교환 전후에 변하지 않고, xxx와 yyy 사이의 인버전 여부만 바뀐다. 그러므로 한 번의 연산은 전체 인버전 수를 정확히 111만큼 증가시키거나 감소시킨다. 정렬하려면 모든 인버전을 없애야 하므로 필요한 연산 횟수는 처음 인버전 수 이상이다.

길이 222인 구간 [i,i+1][i,i+1][i,i+1]을 고르면 그 두 원소가 바로 가장 작은 원소와 두 번째로 작은 원소이므로 두 원소를 단순히 교환하는 연산이 된다. 따라서 인접한 역전쌍을 하나씩 교환하는 버블 정렬을 그대로 사용할 수 있다. 각 교환은 인버전을 정확히 하나 줄이고, 모든 인버전이 사라지면 정렬된다.

따라서 버블 정렬의 교환 횟수가 최소 연산 횟수이다. 시간 복잡도는 O(N2)O(N^2)O(N2)이고, 출력되는 연산 수도 최대 N(N−1)/2N(N-1)/2N(N−1)/2개이다. Solution written by GPT5.6