ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1021 νšŒμ „ν•˜λŠ” 큐 with Python
    PS 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λŠ” 두고두고 μ“Έ ν•¨μˆ˜μΌ 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.