[백준 10804] 카드 역배치(파이썬)

문제출처

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)
  • 나는 함수를 선언해서 반복문으로 원소들을 역순으로 배치했다.
  • 슬라이싱을 활용하면 코드의 길이를 줄일 수 있다.