https://www.acmicpc.net/problem/10811
N, M = map(int, input().split())
li = [i + 1 for i in range(N)]
temp = 0
for _ in range(M) :
i, j = map(int, input().split())
for k in range((j-i)//2 + 1) : #역순으로 바꾸는 횟수
temp = li[i-1+k]
li[i-1+k] = li[j-1-k]
li[j-1-k] = temp
print(*li)
이 풀이에서도 계속 에러가 났다.
for문 내 for문을 보면, 원래 range((j-i)//2) 로 했는데 계속 에러 나길래 손코딩 하면서 검사해봤다.
예를 들어 i = 1, j = 4일 경우 1, 2, 3, 4의 인덱스를 역순으로 바꿔야 하는데 range((j-i)//2)일 경우
1 ↔️ 4
2 ↔️ 3
2번 바꿔야 할 것을 1번 밖에 바꾸지 못한다.
수정 했더니 맞았음
#revers() 메소드 이용
N, M = map(int, input().split())
li = [i + 1 for i in range(N)]
temp = 0
for _ in range(M) :
i, j = map(int, input().split())
if i == j : pass
else :
tmp_li = li[i-1:j]
tmp_li.reverse()
li[i-1:j] = tmp_li
print(*li)
reverse() 함수를 이용한다.
li[i-1:j] = tmp_li
이 부분을 보면, tmp_li
에 복사해둔 리스트를 기존 리스트에 범위 지정해서 바로 대입 가능하다는 걸 알 수 있다.
이 문제는 생각할 게 많았다.
방법 2로 풀면 확실히 python이 손쉽게 풀린다. python이 편한 이유..
그러나 python만 쓸 거 아니고 머리 쓰는 연습을 해야 되기 때문에 ㅋㅋ
arr = [1, 2, 3, 4]
print(*arr)
4 3 2 1
li = [1, 2, 3, 4, 5]
reversed_li = li[::-1]
print(reversed_li)
li[::-1]
은 순서가 뒤집어진 li
리스트가 된다.
하지만 원본 리스트는 바뀌지 않는다.
li = [1, 2, 3, 4, 5]
li.reverse()
print(li)
li = [1, 2, 3, 4, 5]
reverse_li = list(reversed(li))
print(reverse_li)
reverse() 내장함수는 주어진 시퀀스 (리스트, 튜플 등)에 대해 순서가 뒤집어진 iterator 객체의 형태로 반환하기 때문에 내장함수 list()를 이용해서 리스트 자료형으로 변환해준다.
원본 리스트 close의 순서는 바뀌지 않는다.