사용자 도구

사이트 도구


ps:problems:boj:9078

정렬

ps
링크acmicpc.net/…
출처BOJ
문제 번호9078
문제명정렬
레벨골드 2
분류

불변성

시간복잡도O(T*n)
인풋사이즈T<=20, n<=100
사용한 언어Python 3.13
제출기록32412KB / 32ms
최고기록32ms
해결날짜2025/11/13

풀이

  • 주어진 연산은 같은 크기의 로테이션을 두번 돌리는 것과 동일하다. 한번의 로테이션 연산은 그 크기에 따라서 순열의 패리티가 바뀔수 있지만, 그것을 두번 반복하면 순열의 패리티는 보존된다. 따라서 주어진 순열이 홀순열이면 정렬 불가.
  • 묶은 숫자를 한칸 앞으로 끼워넣으면, 이것은 인접한 3개 원소를 로테이트하는 것과 동일한 효과가 된다. 이것만으로도 순열의 패리티가 같은 한 어느 순열로도 변환이 가능하므로, 주어진 순열이 짝순열이면 정렬 가능.
  • 순열의 패리티만 확인하면 되므로 시간복잡도는 O(n)

코드

"""Solution code for "BOJ 9078. 정렬".

- Problem link: https://www.acmicpc.net/problem/9078
- Solution link: http://www.teferi.net/ps/problems/boj/9078

Tags: [parity of permutation]
"""

from teflib import permcycle
from teflib import psutils


@psutils.run_n_times
def main():
    _N = int(input())
    nums = [int(x) - 1 for x in input().split()]
    print('YES' if permcycle.sign_of_permutation(nums) == 1 else 'NO')


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
B I G R᠎ M
 
ps/problems/boj/9078.txt · 마지막으로 수정됨: 2025/11/13 07:19 저자 teferi