-- 예전 기록/BOJ

[ BOJ ] 25181 : Swap the elements ( GOLD 3 ) / Python

rejo 2024. 2. 17. 14:43

>> 문제 바로가기 (https://www.acmicpc.net/problem/25181)

풀이 과정

특정 i번째 숫자 앞뒤로, 바꿨을 때 Ai != Bj && Aj != Bi 를 만족하는 j번째 숫자를 찾아 바꾸면 된다.

import sys
input = sys.stdin.readline

n = int(input().rstrip())
arr = list(map(int, input().rstrip().split()))
narr = []
for a in arr: narr.append(a)

done = True
for i in range(n):
    if arr[i] == narr[i]:
        idx = i + 1
        while idx < n and narr[i] == narr[idx]: idx += 1
        if idx == n: 
            idx = i - 1
            while idx >= 0 and (narr[idx] == arr[i] or narr[i] == arr[idx]): idx -= 1
            if idx == -1:
                done = False
                break
        tmp = narr[i]
        narr[i] = narr[idx]
        narr[idx] = tmp
if done == True: print(' '.join(map(str, narr)))
else: print(-1)