문제출처
https://www.acmicpc.net/problem/10804
문제분석
오름차순 순으로 주어진 숫자 배열에서 주어진 구간범위 만큼 원소들을 역순으로 재배치하는 문제다.
배열의 원소 순서 바꾸기를 연습할 수 있었다.
문제접근
- 리스트 컴프리헨션을 통해 오름차순으로 배열을 선언한다.
- 슬라이싱을 통해 배열을 조작한다.
- 모든 조작이 마무리 된 경우 최종 결과를 출력한다.
코드 구현 및 배운 점
정답으로 제출한 코드
# 2024.05.12(일)
# 백준 10804: 카드 역배치
import sys
input = sys.stdin.readline
def sol():
numbers = [x for x in range(21)]
for i in range(10):
a, b = map(int, input().split())
arrange(a, b, numbers)
print(*numbers[1:21])
def arrange(a, b, numbers):
reverse = numbers[a:b + 1][::-1]
for i in range(a, b + 1):
numbers[i] = reverse[i - a]
sol()
다른 분의 정답코드
import sys
input = sys.stdin.readline
my_list = [i for i in range(1, 21)] # 1부터 20까지 원소로 리스트르 만들기
for _ in range(10):
start, end = map(int, input().split())
my_list[start-1:end] = my_list[start-1:end][::-1] # 슬라이싱, 역순 슬라이싱, 슬라이싱 할당
print(*my_list)
- 나는 함수를 선언해서 반복문으로 원소들을 역순으로 배치했다.
- 슬라이싱을 활용하면 코드의 길이를 줄일 수 있다.