PS

[λ°±μ€€] 1021 νšŒμ „ν•˜λŠ” 큐 with Python

ν˜•μ€€_It's 2022. 1. 31. 00:21
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 1021 νšŒμ „ν•˜λŠ” 큐

πŸ’‘ 쑰건

  1. N개의 μ›μ†Œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” μ–‘λ°©ν–₯ μˆœν™˜ 큐

    • 1 <= N <= 50
  2. νμ—μ„œ λ‹€μŒκ³Ό 같은 3가지 연산을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

    • 첫 번째 μ›μ†Œλ₯Ό 뽑아낸닀. 이 연산을 μˆ˜ν–‰ν•˜λ©΄, μ›λž˜ 큐의 μ›μ†Œκ°€ a1, ..., akμ΄μ—ˆλ˜ 것이 a2, ..., ak와 같이 λœλ‹€.
    • μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈ μ΄λ™μ‹œν‚¨λ‹€. 이 연산을 μˆ˜ν–‰ν•˜λ©΄, a1, ..., akκ°€ a2, ..., ak, a1이 λœλ‹€.
    • 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈ μ΄λ™μ‹œν‚¨λ‹€. 이 연산을 μˆ˜ν–‰ν•˜λ©΄, a1, ..., akκ°€ ak, a1, ..., ak-1이 λœλ‹€.
  3. κ·Έ μ›μ†Œλ₯Ό 주어진 μˆœμ„œλŒ€λ‘œ λ½‘μ•„λ‚΄λŠ”λ° λ“œλŠ” 2번, 3번 μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜λŠ” 문제.

  4. Queue, 자료ꡬ쑰 μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

from sys import stdin
from collections import deque

n, m = map(int, stdin.readline().split())
arr = list(map(int, stdin.readline().split()))
q = deque()
for i in range(1, n + 1):
    q.append(i)
res = 0

for i in arr:
    while 1:
        if q[0] != i:
            if len(q) // 2 >= q.index(i):
                temp = q.popleft()
                q.append(temp)
                res += 1
            else:
                q.appendleft(q.pop())
                res += 1
        else:
            q.popleft()
            break

print(res)

πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

예제

32 6
27 16 30 11 6 23

μ‹€ν–‰κ²°κ³Ό

59

⌨️ 문제 풀이

  1. 큐의 크기만큼 1λΆ€ν„° NκΉŒμ§€μ˜ 수λ₯Ό ν¬ν•¨ν•œ 리슀트λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

  2. 결과값을 μ €μž₯ν•  res λ³€μˆ˜λ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•΄μ€€λ‹€.

  3. μΆ”μΆœν•˜λ €κ³  ν•˜λŠ” 수λ₯Ό μ €μž₯ν•œ arr λ₯Ό μˆœνšŒν•˜λ©΄μ„œ break λͺ…령이 λ–¨μ–΄μ§ˆ λ•Œ κΉŒμ§€ while λ°˜λ³΅ν•œλ‹€.

  4. λ§Œμ•½ 큐의 첫번째 μ›μ†Œκ°€ λ½‘μ•„λ‚΄λ €λŠ” μˆ˜μ™€ 일치 ν•˜λŠ” 경우, λ°”λ‘œ μ›μ†Œλ₯Ό 뽑아낸 λ’€ while을 μ’…λ£Œν•œλ‹€

  5. λ§Œμ•½ 큐의 첫번째 μ›μ†Œκ°€ λ½‘μ•„λ‚΄λ €λŠ” μˆ˜μ™€ 일치 ν•˜μ§€ μ•ŠλŠ” 경우,

    1. 큐의 길이λ₯Ό 2둜 λ‚˜λˆˆ λͺ«μ΄ νμ—μ„œ 뽑아 λ‚΄λ €λŠ” κ°’μ˜ μΈλ±μŠ€λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™λ‹€λ©΄ μ™Όμͺ½μ—μ„œ μ›μ†Œλ₯Ό 뽑아 였λ₯Έμͺ½μ— 뢙인닀.
    2. 큐의 길이λ₯Ό 2둜 λ‚˜λˆˆ λͺ«μ΄ νμ—μ„œ 뽑아 λ‚΄λ €λŠ” κ°’μ˜ μΈλ±μŠ€λ³΄λ‹€ μž‘λ‹€λ©΄ 였λ₯Έμͺ½μ—μ„œ μ›μ†Œλ₯Ό 뽑아 μ™Όμͺ½μ— 뢙인닀.

πŸ’Ύ λŠλ‚€μ 

  1. python 의 deque λŠ” 맀우 κ°•λ ₯ν•˜λ‹€.
  2. appendleftλŠ” 두고두고 μ“Έ ν•¨μˆ˜μΌ 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.
λ°˜μ‘ν˜•