[백준/Python] 10811번 : 바구니 뒤집기

문제

https://www.acmicpc.net/problem/10811

  • 특정 인덱스의 값들을 역순으로 정렬하는 문제

풀이

최초 풀이

파이썬 내장 함수인 extend(), reverse()를 활용하여 문제를 풀었다. 다른 풀이들을 참고해보니 슬라이싱을 활용하여 푸는 경우가 많은 것 같다. 내 생각에도 list slice를 활용해서 푸는 것이 더바람직한 것 같다.

N, M = map(int, input().split(" "))

ls = [num for num in range(1, N+1)]

for _ in range(M):
    i, j = map(int, input().split(" "))
    target = [ls[k] for k in range(len(ls)) if k >= i-1 and k <= j-1]
    target.reverse()

    temp = ls[:i-1]
    temp.extend(target)
    temp.extend(ls[j:])
    ls = temp

print(*ls)

List slice를 활용한 문제 풀이

slice를 활용하면 코드가 무척 단순해진다. [::-1]를 활용하면 리스트를 역순으로 뒤집을 수 있다.

N, M = map(int, input().split(" "))

ls = [num for num in range(1, N+1)]

for _ in range(M):
    i, j = map(int, input().split(" "))
    ls[i-1:j] = ls[i-1:j][::-1]
print(*ls)

후기

리스트를 역순으로 뒤집는 방법은 기억해두는 것이 좋을 것 같다. 다음과 같이 for loop에서도 역순으로 값을 가져올 때 활용할 수 있다.

for i in ls[::-1]:
    print(i)