jyamethyst21 님의 블로그
백준 10804번 - '카드 역배치' (PYTHON 풀이) 본문
문제:


1부터 20까지 숫자가 오름차순으로 놓여져 있을 때, 10번의 범위를 입력받고, 해당하는 범위의 수를 역순으로 재배치해서 최종적으로 배치된 숫자를 출력하는 문제이다.
풀이:
number = []
for j in range(1, 21):
number.append(j)
for i in range(10):
a,b = map(int,input().split())
number_re = number[a-1:b]
number[a-1:b] = number_re[::-1]
print(*number)
우선 1부터 20까지 들어있는 리스트를 반복문을 통해 만든다.
이후 총 10번의 입력을 받기 때문에 for문을 사용해 10번 a,b 값을 입력받는다.
필자는 우선, a,b 범위 내에 있는 값을 number_re라는 리스트 안에 새로 빼내서 해당 리스트 내에서 역순으로 변환한 뒤, 다시 제자리에 저장하는 방식으로 진행했다.
그래서 a,b에 해당하는 값을 number_re에 옮기는데, 여기서 주의할 점은 사용자로부터 입력받은 값은 1번째 인덱스부터 시작하는 걸로 받지만 실제 파이썬에서의 첫번째 인덱스는 0번부터 시작하므로 a와 b에 1씩 빼주어야 한다는 점이다.
즉, 1번자리부터 3번자리에 있는 것까지 바꾸고 싶어한다면 1,3으로 입력받겠지만 실제 파이썬은 0번부터 시작하므로 수정할 때 0,2 범위에 해당하는 값으로 변경해야 한다는 것이다.
그래서 number[a-1:b]로 슬라이싱을 해서 number_re에 넣었다. 여기서 b는 1을 뺴주지 않은 이유는 원래 슬라이싱은 [시작:끝]일 때 끝-1만큼에 해당하는 값만 슬라이싱 하기 때문에 일반적으로 [시작:끝+1] 이렇게 범위를 주게된다. 그래서 -1하는 대신에 +1을 제외했기 때문에 똑같이 동작할 것이다.
그 다음, 범위를 정해서 새로운 리스트에 저장하고, 슬라이싱 [::-1]로 역순으로 변환한 뒤 다시 동일한 자리에 집어넣었다.([::-1]은 파이썬에서 역순으로 변경할 때 쓰는 슬라이싱이다.)
그리고 number를 출력 예제에 동일하게 출력하였다.
'CODING 💻' 카테고리의 다른 글
| 백준 17496번 - '스타후르츠' (PYTHON 풀이) (0) | 2026.03.03 |
|---|---|
| 백준 4458번 - '첫 글자를 대문자로' (PYTHON 풀이) (0) | 2026.03.02 |
| 백준 11945번 - '뜨거운 붕어빵' (PYTHON 풀이) (0) | 2026.02.28 |
| 백준 31403번 - 'A+B-C' (PYTHON 풀이) (0) | 2026.02.27 |
| 백준 28281번 - '선물' (PYTHON 풀이) (0) | 2026.02.26 |
