티스토리 뷰
https://www.acmicpc.net/problem/1021
요즘 자료구조 문제를 많이 푸는 것 같다. 이 문제는 회전하는 큐를 덱으로 구현하는 문제이다.
idx라는 변수를 두어 answer에 넣어야 하는 수가 무엇인지 검사하였다. (입력의 num 배열로)
만약 아니라면, 1번 연산을 다시 되돌리고 찾고자 하는 수의 위치를 찾는다.
인덱스가 앞쪽이면 2번 연산을, 뒤쪽이면 3번 연산을 수행한다.
이때 인덱스 비교를 할 때 // 대신 / 를 써야 한다.
Q의 길이가 홀수일 때 앞쪽에 두는 게 더 빠르기 때문이다.
예를 들어, [1, 2, 3, 4, 5] 가 있고 3을 찾고자 하면 앞쪽은 [1, 2, 3]이고 뒤쪽은 [4, 5]이다.
그러고 3번을 앞으로 뽑으면 2번의 연산을 하면 되지만 / 뒤로 뽑으면 3번의 연산을 해야 한다.
따라서 Q의 길이가 홀수일 때 실수형으로 나오게 하면, 중간값이 앞쪽에 속하게 된다.
# 회전하는 큐
import sys
input = sys.stdin.readline
from collections import deque
N, M = map(int, input().split())
num = list(map(int, input().split()))
answer = []
cnt = 0
Q = deque([i for i in range(1, N+1)])
while True:
if answer == num:
print(cnt)
break
idx = len(answer)
while True:
q = Q.popleft() # 1
if q == num[idx]:
answer.append(q)
break
else:
Q.appendleft(q) # 원래대로
if Q.index(num[idx]) < len(Q) / 2:
Q.append(Q.popleft()) # 2
cnt += 1
else:
Q.appendleft(Q.pop()) # 3
cnt += 1
'PS > BOJ Python' 카테고리의 다른 글
2003번 - 수들의 합 2 (0) | 2023.04.23 |
---|---|
3036번 - 링 (0) | 2023.04.05 |
10816번 - 숫자 카드 2 (0) | 2023.04.03 |
1158번 - 요세푸스 문제 (0) | 2023.04.03 |
1759번 - 암호 만들기 (0) | 2023.04.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 러스트
- 10971
- 조합
- 1715
- 11051
- 17478
- 10815
- 1182
- 삼성청년소프트웨어아카데미
- heapq
- 스택
- 1764
- dp
- 큐
- 2805
- 10845
- 1358
- 브루트포스
- 파이썬
- 덱
- 딕셔너리
- 수학
- 백트래킹
- 프로그래머스
- 빌림
- 싸피
- 백준
- 자료구조
- 10816
- 1759
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함