3/21 스터디 문제
1번 문제.
https://www.acmicpc.net/problem/1021
-> 회전하는 큐
테스트 케이스 이해하기
1번 문제 풀이 코드
import sys
# 큐의 크기, 뽑아내려는 수의 개수
n, m = list(map(int, sys.stdin.readline().split()))
# 큐
que = [i for i in range(1, n + 1)]
# 뽑아내려는 수
pickNums = list(map(int, sys.stdin.readline().split()))
#연산 횟수
cnt = 0
# print(queue)
# 연산1 : 처음 오는 수를 뽑을 수 있다.
while pickNums:
# 연산 조건 : 뽑으려는 수 큐의 앞쪽에 가깝나 뒤에 가깝나를 기준으로 한다.
# 연산2 : 앞쪽에 가까우면 왼쪽으로 한 칸 이동
if que.index(pickNums[0]) < len(que) - que.index(pickNums[0]):
while True:
# 만약 뽑아야 하는 수가 앞에 있으면 뽑음
if que[0] == pickNums[0]:
del que[0] # 큐에서 제거
del pickNums[0] # 뽑아야 하는 수도 제거
break
# 연산2 수행
else:
que.append(que[0])
del que[0]
cnt +=1
# 연산3 : 뒤쪽에 가까우면 오른쪽으로 한 칸 이동
else:
while True:
# 만약 뽑아야 하는 수가 앞에 있으면 뽑음
if que[0] == pickNums[0]:
del que[0] # 큐에서 제거
del pickNums[0] # 뽑아야 하는 수도 제거
break
# 연산2 수행
else:
que.insert(0, que[-1])
del que[-1]
cnt +=1
print(cnt)
=======================================================
오늘은 생일이므로 기분은 좋지만, 축하 연락을 많이 받아서 약간 집중이 흐트러졌다..ㅋㅋ 내일은 더 열심히 하는걸로!!
** pop을 사용해서 했을때 시간이 더 올래걸림!! del을 이용해서 풀었더니 성공이다.
Author And Source
이 문제에 관하여(3/21 스터디 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hey_junie/321-스터디-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)