[백준] 10811: 바구니 뒤집기 - python[파이썬] (feat. reverse, 슬라이싱)

다인·2024년 7월 24일

백준

목록 보기
15/112
post-thumbnail

인덱스 조심하여 짱구를 굴려서 코드를 작성해보았는데 분명히분명히 더 좋은 방법이 있을 것 같아 찾아보았다. 역시 reverse라는 멋진 메소드가 있더라ㅎ

1. 반복문

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 메소드를 사용하였다.

2. 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]
    temp.reverse()
    arr[a-1:b] = temp

print(*arr)

여기서 주의할 점은

arr[a-1:b] = temp.reverse()

로 바로 작성하면 안된다는 것이다.
reverse는 리스트를 역순으로 바꾸어준 후 아무것도 반환하지 않기 때문에 arr[a-1:b]는 받을 객체가 없어서 에러를 반환하게 된다.

3. 리스트 슬라이싱

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 사용이 젤 안 좋당ㅎ

0개의 댓글