본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 1021 회전하는 큐

/  제출 1  /

import sys
input = sys.stdin.readline
from collections import deque

n, m = map(int, input().split())
q = deque([i+1 for i in range(n)])

target = deque(list(map(int, input().split())))
result = 0
for t in target:
  left = q.index(t)
  right = len(q) - left
  
  if left < right:
    while True:
      curr = q.popleft()
      if curr == t:
        break
      q.append(curr)
      result += 1
      
  else:
    newLeft = []
    while True:
      curr = q.pop()
      result += 1
      if curr == t:
        break
      newLeft.append(curr)
      
    newLeft.reverse()
    q = deque(newLeft+list(q))

print(result)

한 큐에 맞긴 했다만.. 이게 40분 걸릴 일이냐.. 실버4를.. 

그것도 풀이를 13분만에 떠올린 걸..

 

갑자기 흐름 놓치고 인덱스 꼬여서 하나하나 확인해가면서 했다.

코드 작성 전에 인덱스나 흐름 확실히 짚고 시작하자 진짜 ㅠ

 

뭐에서 헷갈려서 시간 낭비했냐면 일단 문제 파악이 덜 됐었다.

 

왼쪽이던, 오른쪽이던 맨 끝에만 있으면 숫자를 뽑을 수 있다고 생각했는데 사실 1번 경우에서 명백하게 맨 왼쪽에서만 뽑을 수 있다고 조건이 주어져있다. 그냥 집중력 깨져서 못 푼거다... 

 

두 번째 오류는 1번의 경우에서 연계된 오류다. 2번과 3번의 경우에서 result에 숫자가 더해지는 경우가 다르다.

3번의 경우는 타겟이 큐에서 나와서 움직이는 상황까지 포함해서 카운팅이 들어가고, 2번은 아니다.

근데 두 케이스를 동일선상에 놓고 봐서 계속 값이 되게 작은 오차로 많고 적어졌다. 

 

하여간 이해는 잘 마무리했고 구현도 잘 끝냈다.

헤맨 문제이므로 다른 분들 코드 보고 복기 좀 해야겠다. 

 

'CodingTest > Baekjun Online Judge' 카테고리의 다른 글

[ BOJ / 파이썬 ] 3986 좋은 단어  (0) 2022.08.15
[ BOJ / 파이썬 ] 5430 AC  (0) 2022.08.15
[ BOJ / 파이썬 ] 2164 카드 2  (0) 2022.08.14
[ BOJ / 파이썬 ] 18258 큐2  (0) 2022.08.14
[ BOJ / 파이썬 ] 2493 탑  (0) 2022.08.14