덱을 이용해서 양방향 배열 구현하기
연산의 종류 3가지
1. 첫 번째 배열 원소 빼내기
2. 왼쪽으로 배열 이동
3. 오른쪽으로 배열 이동
while i != array[0]:
array.appendleft(array.pop())
cnt += 1
array.popleft()
while문이 끝난 뒤
array.popleft()를 붙여주지 않아서
한동안 헤맸다!
문제 풀기 전에
미리 설계를 해두고
코드를 짜는 습관을 들여보자 :)..
from collections import deque
n, m = map(int, input().split())
array = deque([i for i in range(1, n + 1)])
location = list(map(int, input().split()))
cnt = 0
for i in location:
if i == array[0]: # 1번 연산
array.popleft()
continue
else: # 2번,3번 연산
if array.index(i) > len(array) // 2: # 왼쪽으로 이동
while i != array[0]:
array.appendleft(array.pop())
cnt += 1
array.popleft()
else:
while i != array[0]:
array.append(array.popleft())
cnt += 1
array.popleft()
print(cnt)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n1904] 01타일 in python (0) | 2021.10.15 |
---|---|
[n1026] 보물 in python (0) | 2021.10.13 |
[n1094] 막대기 in python (0) | 2021.10.12 |
[n9933] 민균이의 비밀번호 in python (0) | 2021.10.12 |
[n14502] 연구소 in python (0) | 2021.10.12 |