백준 10811번 바로가기

백준 10813 - 공 바꾸기의 연장선 격인 문제. 범위 안의 전체 요소를 뒤집는 알고리즘만 짜면 간단하다.

나의 풀이

f=lambda:map(int,input().split())
n,m=f();*b,=range(n+1)
for i in range(m):
  i,j = f()
  while i<j:
    b[i], b[j] = b[j], b[i]
    i+=1
    j-=1
print(*b[1:])

m번 동안 while문의 조건 i < j 동안 교체 작업를 반복시켰다. 코드를 줄이려고 고민해봤는데 생각나지 않았다.ㅜㅜ

고수들의 풀이 참고하기!

f=lambda:map(int,input().split())
n,m=f();*b,=range(n+1)
exec("i,j=f();b[i:j+1]=b[j:i-1:-1];"*m)
print(*b[1:])

출처

  1. 범위를 슬라이싱해서 list[a:b] = list[b:a] 지정해주면 뒤집기가 간편하게 가능해진다.
    • range(n+1)범위 설정에 따라 [i:j+1] [j:i-1:-1] 설정해줘야 한다.