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