바구니 뒤집기
import sys
def main():
input = sys.stdin.readline
num_baskets, num_queries = map(int, input().split())
baskets = list(range(1, num_baskets + 1))
for _ in range(num_queries):
i, j = map(int, input().split())
i -= 1
j -= 1
baskets[i : j + 1] = reversed(baskets[i : j + 1])
print(*baskets)
main()
reversed
함수
reversed
함수는 인자로 받은 시퀀스를 거꾸로 순회하는 이터레이터를 반환합니다.
arr = [1, 2, 3, 4, 5]
print(*reversed(arr)) # 5 4 3 2 1
리스트 슬라이싱
리스트 슬라이싱(slicing)은 리스트의 일부를 새로운 리스트로 만들어 반환합니다.
슬라이싱을 할 때는 시작 인덱스:끝 인덱스
형태로 사용합니다.
시작 인덱스는 포함되고, 끝 인덱스는 포함되지 않습니다.
시작 인덱스는 생략하면 0
, 끝 인덱스는 생략하면 len(arr)
가 기본값으로 사용됩니다.
인덱싱과 마찬가지로 음수 인덱스를 사용할 수 있습니다.
arr = [1, 2, 3, 4, 5]
print(arr[1:3]) # [2, 3]
print(arr[1:]) # [2, 3, 4, 5]
print(arr[-1:]) # [5]
print(arr[:3]) # [1, 2, 3]
print(arr[:-1]) # [1, 2, 3, 4]
리스트의 특정 슬라이스에 값 할당하기
대입 연산자의 왼쪽에 리스트 슬라이싱을 사용하면 해당 슬라이스에 값을 할당할 수 있습니다. 오른쪽에는 이터러블이 오면 됩니다.
arr = [1, 2, 3, 4, 5]
arr[1:3] = [10, 20]
print(arr) # [1, 10, 20, 4, 5]
슬라이스의 길이와 이터러블의 길이가 달라도 됩니다. 마치 리스트에서 슬라이스된 부분을 없앤 후, 그 자리에 이터러블의 항목들이 들어가는 것처럼 동작합니다.
arr = [1, 2, 3, 4, 5]
arr[1:3] = [10, 20, 30, 40, 50]
print(arr) # [1, 10, 20, 30, 40, 50, 4, 5]
댓글