[Python]Queue - [λ°±μ€€ 5430] AC

SSOΒ·2023λ…„ 7μ›” 28일
0

Coding Test & Algorithm

λͺ©λ‘ 보기
11/17

πŸ’‘ 문제 μ„€λͺ…

πŸ… λ‚œμ΄λ„ κ³¨λ“œ5

R: 배열에 μžˆλŠ” 수의 μˆœμ„œλ₯Ό λ’€μ§‘λŠ” λͺ…λ Ή
D: 첫 번째 수λ₯Ό λ²„λ¦¬λŠ” λͺ…λ Ή (빈 λ°°μ—΄μ—μ„œ μ‚¬μš©ν•˜λ©΄ μ—λŸ¬)

πŸ›  처음 풀이 방법

  1. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€, μˆ˜ν–‰ν•  ν•¨μˆ˜λ“€, 수의 κ°œμˆ˜μ™€ 숫자 리슀트λ₯Ό deque 둜 μž…λ ₯λ°›λŠ”λ‹€.
  2. μˆ˜ν–‰ν•  ν•¨μˆ˜λ“€μ„ ν•˜λ‚˜μ”© νƒμƒ‰ν•˜λ©° R이면 뒀집기λ₯Ό, Dλ©΄ popleft()λ₯Ό μ‹œν–‰ν•œλ‹€.

처음 μƒκ°ν•œ 풀이 방법은 맀우 κ°„λ‹¨ν–ˆλ‹€.
ν•˜μ§€λ§Œ μ—¬λŸ¬κ°€μ§€ μ£Όμ˜ν•΄μ•Όν•  λ‚΄μš©μ΄ λͺ‡ 가지가 μ‘΄μž¬ν•œλ‹€.

πŸ“Œ μ£Όμ˜μ‚¬ν•­

  • deque둜 μž…λ ₯ 받을 μ‹œ 큐가 λΉ„μ–΄μžˆλ”λΌλ„ κΈΈμ΄λŠ” 1둜 μΈμ‹λ˜κΈ° λ•Œλ¬Έμ— 수의 κ°œμˆ˜κ°€ 0개라면 빈 리슀트둜 μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€.
  • μˆ˜ν–‰ν•  ν•¨μˆ˜λ“€μ€ μ΅œλŒ€ 100,000개둜 Rν•¨μˆ˜κ°€ λ‚˜μ˜¬λ•Œλ§ˆλ‹€ 맀번 μ‹œν–‰ν•˜λ©΄ μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•œλ‹€.

✨ ν•΄κ²° 방법

  • μœ„μ˜ 두 가지 사항을 μ£Όμ˜ν•΄μ•Ό ν•˜λ―€λ‘œ 수의 개수 n이 0이라면 []둜 μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ€˜μ•Όν•œλ‹€.
  • R은 큐λ₯Ό λ’€μ§‘λŠ” ν•¨μˆ˜λ‘œ R이 짝수일 κ²½μš°μ—λŠ” μˆ˜ν–‰ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€!
  • R의 수λ₯Ό μ„ΈκΈ° μœ„ν•΄ flagλΌλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.

from collections import deque

T = int(input())  # ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 수

for _ in range(T):
    func = input()  # μˆ˜ν–‰ν•   ν•¨μˆ˜λ“€
    n = int(input())   # 배열에 λ“€μ–΄μžˆλŠ” 수의 개수 n
    num = deque(input()[1:-1].split(',')) # 배열에 λ“€μ–΄μžˆλŠ” μ •μˆ˜ 리슀트

    # dequeλŠ” λΉ„μ–΄ μžˆμ–΄λ„ 길이λ₯Ό 1둜 μΈμ‹ν•΄μ„œ μ΄ˆκΈ°ν™” ν•„μš”
    if n == 0:
        num = []

    # μ‹œκ°„μ΄ˆκ³Ό λ°œμƒ 방지 - R이 ν™€μˆ˜μΌ λ•Œλ§Œ 뒀집기
    flag = 0
    # μ—λŸ¬ μ—¬λΆ€ νŒλ‹¨
    error = 0

    for i in func:
        if i == 'R':
            # 뒀집기 μœ„ν•œ flag 수
            flag += 1
        else:   
            # 첫 번 μ§Έ 수 버리기
            if len(num) == 0:
                error = 1
                print('error')
                break
            else:
                # flagκ°€ 짝수면 뒀집을 ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ popleft
                if flag%2 == 0:
                    num.popleft()
                else:
                    # λ’€μ§‘μ–΄μ„œ popν•˜λŠ” κ²ƒμœΌλ‘œ κ·Έλƒ₯ pop
                    num.pop()

    if error == 0:
        # flagκ°€ 짝수면 μ›λž˜ μˆœμ„œλ‘œ 좜λ ₯
        if flag%2 == 0:
            print('[' + ','.join(num) + ']')
        else:
            # ν™€μˆ˜λ©΄ λ’€μ§‘νžŒ μƒνƒœλ‘œ 좜λ ₯ 
            num.reverse()
            print('[' + ','.join(num) + ']')

μœ„μ—μ²˜λŸΌ ν•˜λ©΄ μ‹œκ°„μ΄ˆκ³Όλ„ λ‚˜μ§€ μ•Šκ³  잘 λŒμ•„κ°€λŠ” κ±Έ 확인할 수 μžˆλ‹€!


λ‹€λ§Œ ν•˜λ‚˜ κΆκΈˆν•œ 점이 μžˆλ‹€ (이건 ν˜Ήμ‹œ μ•„λŠ” 뢄듀은 λŒ“κΈ€μ„ λ‹¬μ•„μ£Όμ„Έμš”πŸ₯²)

input()을 μ‚¬μš©ν•˜λŠ” 것보닀 sys.stdin.readline()을 μ‚¬μš©ν•˜λŠ” 것이 μ‹œκ°„μ„ 더 λ‹¨μΆ•μ‹œν‚¬ 수 μžˆμ–΄μ„œ 이걸 μ‚¬μš©ν–ˆμ„ λ•ŒλŠ” 계속 ν‹€λ Έλ‹€κ³  λ–΄μ—ˆλ‹€,,,
μ„€λ§ˆ κ·Έκ±° λ•Œλ¬Έμ΄κ² μ–΄ ν•˜κ³  μ½”λ“œλ₯Ό μ—¬λŸ¬κ°€μ§€λ‘œ μˆ˜μ •ν•΄λ΄€λŠ”λ°λ„ 계속 ν‹€λ Έλ‹€κ³  ν•΄μ„œ κ²°κ΅­μ—λŠ” input()을 μ‚¬μš©ν–ˆλ”λ‹ˆ κΈˆμƒˆ 해결됬닀..!! 아직도 뭐가 λ¬Έμ œμΈμ§€ λͺ¨λ₯΄κ² λ‹€... ν˜Ήμ‹œ μ•„μ‹œλŠ” 뢄이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ„Έμš”πŸ™‡β€β™€οΈ

-μ•„λ¬΄νŠΌ 이 문제 λ§ˆμ§€λ§‰μœΌλ‘œ queue μŠ€ν… λ§ˆλ¬΄λ¦¬πŸ‘©πŸ»β€πŸ’»-

profile
πŸ‘©πŸ»β€πŸ’»πŸ‘ŠπŸ»β­οΈ

0개의 λŒ“κΈ€