반응형
이번 문제는 자르고 뒤집고 하는게 많아서 python으로 풀었다.
import sys
n = int(sys.stdin.readline())
password = list(map(int, sys.stdin.readline().split()))
# (뒤집는 시작점, 뒤집는 끝점, 두번째 왼쪽밀기의 정도)를 저장하는 리스트
ansAbles = []
for i in range(n - 1, 0, -1):
Shifted = password[i : n] + password[ : i]
RevSize = 0
RevStart = -1
for j in range(n - 1):
if (Shifted[j] - 1 > 0 and Shifted[j + 1] == Shifted[j] - 1) or (Shifted[j] - 1 == 0 and Shifted[j + 1] == n):
RevSize += 1
if RevStart == -1:
RevStart = j
if RevSize > 0:
ansAbles.append((RevStart, RevSize, i))
ansAbles.sort(key=lambda x : (-(x[1] - x[0])))
password = password[ansAbles[0][2] : n] + password[ : ansAbles[0][2]]
password = password[:ansAbles[0][0]] + password[ansAbles[0][0] : ansAbles[0][1] + 1][::-1] + password[ansAbles[0][1] + 1 : n]
one_idx = password.index(1)
print(n - one_idx)
print(ansAbles[0][0] + 1, ansAbles[0][1] + 1)
print(n - ansAbles[0][2])
반응형