문제
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다.
바구니는 일렬로 놓여져 있고,
가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다.
도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고,
그 범위에 들어있는 바구니의 순서를 역순으로 만든다.
바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음,
바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/10811
입력
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다.
방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
출력
모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
예제 입력
5 4
1 2
3 4
1 4
2 2
예제 출력
3 4 1 2 5
문제 풀이
N,M = map(int,input().split())
L = [a for a in range(1,N+1)]
for _ in range(M):
i, j = map(int,input().split())
temp = L[i-1:j]
temp.reverse()
L[i-1:j] = temp
print(*L)
일정 범위의 순서를 변경하는 문제입니다.
슬라이싱을 활용하여 범위를 설정하였고, reverse 내장 함수를 활용하여 리스트의 원소들을 역순으로 변경하였습니다.
이전에 공부했던 sort 함수가 sort / sorted 2가지 방법으로 적용 가능했었는데요.
마찬가지로 reverse 함수 또한 reverse / reversed 2가지 방법으로 적용 가능합니다.
이에 대한 자세한 설명은 하기 포스트를 통해 확인 가능합니다.
https://www.daleseo.com/python-reversed/
+ reverse 함수를 활용하지 않고 풀이한 방법은 아래와 같습니다.
N,M = map(int,input().split())
L = [a for a in range(1,N+1)]
for _ in range(M):
i, j = map(int,input().split())
temp = L[i-1:j]
L[i-1:j] = temp[::-1]
print(*L)
저처럼 파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.