자료구조를 활용하는 문제
파이썬에는 deque라고 하는 양쪽으로 데이터를 넣고 뺄 수 있는 자료구조가 존재하는데 이걸로 양방향 순환 큐를 구현했다.
from collections import deque
n, m = map(int, input().split())
m_list = list(map(int, input().split()))
# 회전하는 큐 생성
n_list = deque(i+1 for i in range(n))
cnt = 0
for i in range(m):
while(True):
# 첫번째 자리에 원하는 수가 나올때까지 회전을 반복
if m_list[i] == n_list[0]:
n_list.popleft()
break
else:
# 리스트의 길이를 2로 나눈 값으로 앞에 있는지 뒤에 있는지 구분
if n_list.index(m_list[i]) > (len(n_list) // 2):
# .rotate(양수)면 수만큼 오른쪽으로 회전
n_list.rotate(1)
cnt += 1
else:
# .rotate(음수)면 수만큼 왼쪽으로 회전
n_list.rotate(-1)
cnt += 1
print(cnt)
처음에 실행하는데 계속 숫자가 애매하게 틀리는 것 같아 왜그런가 했더니
첫번째 자리에 왔을 때만 뽑아야 하는데 맨뒤에 도착해도 뽑아버린 사람 나야나
'백준' 카테고리의 다른 글
백준 14469번: 소가 길을 건너간 이유(파이썬) (0) | 2024.08.02 |
---|---|
백준 11724번: 연결 요소의 개수 (파이썬) (0) | 2024.07.10 |
백준 19941번: 햄버거 분배 (파이썬) (2) | 2024.07.03 |
백준 16948번: 데스 나이트 (파이썬) (0) | 2024.06.26 |
백준 2870번: 수학숙제 (파이썬) _리스트 출력하기 / for-else (0) | 2024.06.21 |