/ 제출 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 |