일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 백트래킹
- N-Queens
- 영어 회화
- 다이나믹프로그래밍
- 영어회와
- Backtracking Algorithm
- baekjoon
- python
- 파이썬
- BFS
- used to
- 라이브 아카데미
- 회화
- 관계절
- 정렬
- 백트래킹 알고리즘
- dfs
- Hyperledger Fabric
- 영어회화
- 블록체인
- 완전탐색
- 전치사
- 영어
- 백준
- 일상회화
- 알고리즘
- IF
- 회화기초
- 영어기초
- 라이브아카데미
Archives
- Today
- Total
내 맴
[ BAEKJOON ] No. 1021 회전하는큐 본문
728x90
문제 )
https://www.acmicpc.net/problem/1021
[ 풀이 ]
문제 이해를 하는 것이 제일 우선!
문제 이해를 위해 Algorithm의 Flow를 작성해보았다.
예제 2번에 대한 flow이다
뽑아내려는 원소의 위치가 queue의 중간위치보다
✔ 왼쪽에 위치하면 왼쪽으로 원소들을 이동시키는것이 더 편리할 것이고 → Leftmove Function
✔ 오른쪽에 위치한다면 오른쪽으로 원소들을 이동시키는 것이 더 편리할 것이다.→ Rightmove Fuction
< 전체적인 Algorithm의 흐름>
✔ 뽑아내려는 원소의 위치가 들어있는 list → arr
✔ 1부터 N까지의 값이 들어있는 회전큐 list → queue
✔ count =0
1. arr 원소들에 하나씩 접근한다 → i
1-1)
if arr의 원소가 queue의 중간보다 앞에 위치하는 경우,
Ⅰ. 우리가 찾는 원소(i) 가 나올때까지 Leftmove 해주기
Ⅱ. count 증가
else arr의 원소가 queue의 중간보다 뒤에 위치하는 경우,
Ⅰ. 우리가 찾는 원소(i) 가 나올때까지 Rightmove 해주기
Ⅱ. count 증가
1-2)
queue의 제일 앞 원소를 없애준다 (popleft 해주기)
[ queue의 제일 앞 원소 = 우리가 찾는 값 (i) 이므로 ]
- python code
from collections import deque
# 전체적인 Algorithm의 흐름나타내는 Function
def First(N,arr):
count=0
queue=deque([i for i in range(1,N+1)])
for i in arr:
if queue.index(i)<=(len(queue)//2): #arr의 원소가 queue의 중간보다 앞에 위치
while queue[0]!=i:
Leftmove(queue) #i가 나올때까지 Leftmove
count+=1
else: # arr의 원소가 queue의 중간보다 뒤에 위치
while queue[0]!=i:
Rightmove(queue) #i가 나올때까지 Rightmove
count+=1
queue.popleft() #queue의 제일 앞 원소 pop
return count
def Leftmove(arr):
mid=arr.popleft()
arr.append(mid)
def Rightmove(arr):
mid=arr.pop()
arr.appendleft(mid)
N,M=map(int, input().split())
p=list(map(int,input().split()))
print(First(N,p))
728x90
'Algorithm > Baekjoon 문제풀이' 카테고리의 다른 글
[ BAEKJOON ] No. 11047 동전 0 (0) | 2020.04.23 |
---|---|
[ BAEKJOON ] No. 5430 AC (0) | 2020.04.21 |
[ BAEKJOON ] No. 10866 덱 (0) | 2020.04.16 |
[ BAEKJOON ] No. 1966 프린터 큐 (0) | 2020.04.11 |
[ BAEKJOON ] No. 11866 요세푸스 문제 0 (0) | 2020.04.10 |