이 문제는 문제의 이름처럼 카드를 역배치해야 한다.
역배치 방법은 두가지가 있다.
먼저, 리스트의 슬라이싱을 이용해 역배치하는 방법이다.
arr = [0, 1, 2, 3, 4, 5]
arr[1:5]
위와 같은 코드는 arr[1] ~ arr[4]까지를 잘라내어 [1, 2, 3, 4]를 만들어 낸다.
arr[1:5:3] # [1, 4]
arr[5:1:-1] # [5, 4, 3, 2]
마지막 숫자는 다음 숫자로 가는 간격을 의미하므로 -1을 적으면 거꾸로 가게 된다.
이를 이용한 역배치 코드는 다음과 같다.
먼저 역배치하고 싶은 부분을 슬라이싱한 뒤, 거꾸로 슬라이싱하여 대입한다.
# 인덱스 (a - 1)부터 (b - 1)까지의 요소를 역배치하는 경우
if a == 1:
# 인덱스 0부터 역배치 하는 경우
cards[a-1:b] = cards[b-1::-1]
else:
cards[a-1:b] = cards[b-1:a-2:-1]
파이썬은 역배치를 위한 내장함수를 이미 가지고 있다.
첫번째로, reverse()
함수는 리스트의 메소드로, None
을 반환하며 리스트 원래의 내용을 변형시킨다.
print(arr.reverse()) # None
print(arr) # [5, 4, 3, 2, 1, 0]
두번째로, reversed()
함수는 iterable 변수를 인자로 받아 역배치한 객체를 반환한다.
print(reversed(arr)) # <list_reverseiterator object at 0x000001D7872E33A0>
print(list(reversed(arr))) # [5, 4, 3, 2, 1, 0]
print(arr) # [0, 1, 2, 3, 4, 5]
reversed()
함수를 사용하여 주어진 리스트를 역배치하는 코드는 다음과 같다.
# 인덱스 (a - 1)부터 (b - 1)까지의 요소를 역배치하는 경우
cards[a-1:b] = reversed(cards[a-1:b])
역배치 코드는 reverse
라는 함수를 만들어 구현했다.
import sys
cards = [i for i in range(1, 21)]
def reverse(a, b):
if a == 1:
cards[a-1:b] = cards[b-1::-1]
else:
cards[a-1:b] = cards[b-1:a-2:-1]
# reversed 함수 사용
# cards[a-1:b] = reversed(cards[a-1:b])
# 입력 -> 역순 정렬
for _ in range(10):
a, b = map(int, sys.stdin.readline().split())
reverse(a, b)
# 출력
for card in cards:
sys.stdout.write(f'{card} ')