인덱스 조심하여 짱구를 굴려서 코드를 작성해보았는데 분명히분명히 더 좋은 방법이 있을 것 같아 찾아보았다. 역시 reverse라는 멋진 메소드가 있더라ㅎ
import math
N, M = map(int, input().split())
arr = [i+1 for i in range(N)]
for k in range(M):
a, b = map(int, input().split())
for i in range(a, math.ceil((a+b)/2)):
arr[i-1], arr[a+b-i-1] = arr[a+b-i-1], arr[i-1]
print(*arr)
배열에 인덱스 0~4까지 1~5의 숫자를 넣었고, a~b(문제에서는 i~j)의 범위에서 딱 반만 끊고 양 끝 바구니의 공을 바꾸어주었다. for문의 범위에는 int만 들어가야 하므로 반을 끊고, .5로 나누어지면 올림을 해주어야 해서 ceil 메소드를 사용하였다.
N, M = map(int, input().split())
arr = [i+1 for i in range(N)]
for i in range(M):
a, b = map(int, input().split())
temp = arr[a-1:b]
temp.reverse()
arr[a-1:b] = temp
print(*arr)
여기서 주의할 점은
arr[a-1:b] = temp.reverse()
로 바로 작성하면 안된다는 것이다.
reverse는 리스트를 역순으로 바꾸어준 후 아무것도 반환하지 않기 때문에 arr[a-1:b]는 받을 객체가 없어서 에러를 반환하게 된다.
reverse 메소드를 사용한 코드를 작성하면서 리스트를 역순으로 바꾸는 가장 간단한 방법인 슬라이싱이 떠올랐다. 역시 이것도 간단한 코드가 완성되었당ㅎ
N, M = map(int, input().split())
arr = [i+1 for i in range(N)]
for i in range(M):
a, b = map(int, input().split())
temp = arr[a-1:b]
arr[a-1:b] = temp[::-1]
print(*arr)

아래서부터 본 글에서 작성한 1~3까지의 방법이다.
역시 단순 range 사용이 젤 안 좋당ㅎ