3/21 스터디 문제

hyejun sang·2022년 3월 21일
0

알고리즘

목록 보기
8/28
post-thumbnail

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을 이용해서 풀었더니 성공이다.

0개의 댓글