문제
https://www.acmicpc.net/problem/1021
풀이
from collections import deque
n,m = map(int,input().split())
arr_ = deque(map(int,input().split())) #1
arr = deque([i+1 for i in range(n)]) #2
cnt=0
while arr_:
x = arr.index(arr_[0]) #3
if x<=len(arr)//2: #4
arr.rotate(-x) #5
cnt+=x
else: #6
arr.rotate(len(arr)-x)
cnt+=len(arr)-x
arr.popleft() #7
arr_.popleft() #8
print(cnt)
찾는 숫자가 큐의 앞쪽에 있는지 뒤쪽에 있는지 판별하면서 풀었다.
- arr_ 은 뽑아야하는 숫자 리스트
- arr 은 1~n까지의 수
- arr_[0]의 위치를 찾아준다. (x 에 저장)
- 문제의 2번방법과 3번방법 중 사용해야하는 방법을 찾아야한다. arr의 중간을 기준으로 앞에 있으면 2번방법, 뒤에 있으면 3번방법을 사용해야한다. if 문이 중간보다 작을때이므로 2번 방법이다.
- 중간보다 작을때는 x만큼 뒤로 보내줘야한다. rotate(-x)를 사용해준다. cnt에 x만큼 더해준다.
- 중간보다 클때는 x만큼 앞으로 보내줘야한다. rotate(len(arr)-x)를 사용해준다.
- arr의 첫번째 숫자를 pop해준다 (1번방법)
- arr_[0] 을 구했으니 pop해준다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #2667 - 단지번호붙이기 (0) | 2021.12.12 |
---|---|
[Python] 백준 #5430 - AC (백준 숏코딩 풀이 첨부) (0) | 2021.12.11 |
[Python] 백준 #1966 - 프린터 큐 (0) | 2021.12.11 |
[Python] 백준 #1152 - 단어의 개수 (1) | 2021.12.08 |
[Python] 백준 #1157 - 단어 공부 (1) | 2021.12.08 |