📌
총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진다. i번째 줄에는 i번째 구간의 시 작 위치 ai와 끝 위치 bi가 차례대로 주어진다. 이때 두 값의 범위는 1 ≤ ai ≤ bi ≤ 20이다. 1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다.
< input example >
5 10
9 13
1 2
3 4
5 6
1 2
3 4
5 6
1 20
1 20
✔️ code
import sys
sys.stdin=open("input.txt", "r")
card=[]
#1~20 카드 리스트 만들기
for i in range(1, 21):
card.append(i)
for i in range(10):
#10개의 구간 입력받기
ai, bi=map(int, input().split())
#부분 역순, 대입
card[ai-1:bi]=list(reversed(card[ai-1:bi]))
print(card)
📍
reversed 는 객체를 반환하기 때문에 card 리스트 지정 범위에 역순 리스트를 대입해주기 위해서
반환된 객체를 list 화 해주었다.
#swap
#a,b = b,a
a=list(range(21))
#변수 없이 반복
for _ in range(10):
s, e=map(int, input().split())
#(e-s+1)//2 바퀴 돌면서 숫자를 바꿔준다.
#3~7 >>> 3바퀴 돌면서 (3,7) (4,6) 자리를 바꿔준다.
for i in range((e-s+1)//2):
a[s+i], a[e-i]=a[e-i], a[s+i]
a.pop(0)
for x in a:
print(x, end='')
📍 list(range(end+1)) 를 사용하면 for 문을 사용하지 않고 list 를 만들 수 있다.
📍 반복문을 돌 때, 변수에 대입하면서 반복문을 도는 것 역시 시간이 걸리므로 변수 없이
for _ in range() 가 가능하다.
📍 파이썬은 swap 으로 a,b = b,a 가 가능하다.
>>>
파이썬의 장점 중 하나인 swap 을 사용할 생각을 왜 못했을까 ^^
'알고리즘' 카테고리의 다른 글
[알고리즘] 수들의 합 (0) | 2022.01.28 |
---|---|
[알고리즘] 두 리스트 합치기 (0) | 2022.01.27 |
[알고리즘] 숫자만 추출 (0) | 2022.01.24 |
[알고리즘] 회문 문자열 검사 (0) | 2022.01.24 |
[알고리즘] 점수계산 (0) | 2022.01.24 |