[Python] G5_5430_AC ๐Ÿ•น

Sangho Hanยท2023๋…„ 5์›” 30์ผ
post-thumbnail

https://www.acmicpc.net/problem/5430

๋ฌธ์ œ

์„ ์˜์ด๋Š” ์ฃผ๋ง์— ํ•  ์ผ์ด ์—†์–ด์„œ ์ƒˆ๋กœ์šด ์–ธ์–ด AC๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. AC๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด ์–ธ์–ด์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜ R(๋’ค์ง‘๊ธฐ)๊ณผ D(๋ฒ„๋ฆฌ๊ธฐ)๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ R์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜์ด๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•จ์ˆ˜๋Š” ์กฐํ•ฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "AB"๋Š” A๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์— ๋ฐ”๋กœ ์ด์–ด์„œ B๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "RDD"๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋‹ค์Œ ์ฒ˜์Œ ๋‘ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. T๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. p์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค n โ‰ค 100,000)

๋‹ค์Œ ์ค„์—๋Š” [x1,...,xn]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค xi โ‰ค 100)

์ „์ฒด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง€๋Š” p์˜ ๊ธธ์ด์˜ ํ•ฉ๊ณผ n์˜ ํ•ฉ์€ 70๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ

์กฐ๊ฑด

  • ์‹œ๊ฐ„ ์ œํ•œ: 1์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 256MB

์ดˆ๊ธฐ ์ฝ”๋“œ


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

for _ in range(int(input())):         
    command = input().rstrip()  # ๋ช…๋ น์–ด
    n = int(input())            # ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜
    
    if n == 0:
        nums = input().rstrip()
        print('error')
        continue
        
    nums = deque(map(int,input().lstrip('[').rstrip(']\n').split(',')))
    
    temp = True
    for c in command:
        if c == 'R':
            nums.reverse()
        elif c == 'D':
            if not nums:
                temp = False
                break
            nums.popleft()
            
    if temp:
        nums = list(nums)
        print('[',end = '')
        if nums:
            for i in range(len(nums)-1):
                print(nums[i],',', sep = '', end = '')
            print(nums[-1], end = '')
        print(']')
    else:
        print('error')

๐Ÿค” ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ๋Š”, ๊ฐ„๋‹จํ•˜๊ฒŒ deque๋กœ reverse์™€ popleft๋งŒ ์‚ฌ์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ์„ ์ค„ ์•Œ์•˜๋‹ค. ํ•˜์ง€๋งŒ R์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค reverse๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน์–ด ๊ฒฐ๊ตญ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค...

๐Ÿ”” ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€, reverse๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ reverse ์‹œํ‚ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค! ์„œ์นญ์„ ํ†ตํ•ด ์•Œ์•„๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ˆ˜์ • ์ฝ”๋“œ

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

for _ in range(int(input())):   
     
    command = input().rstrip()  # ๋ช…๋ น์–ด
    n = int(input())            # ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜
    Q = deque()
    nums = input().rstrip()
    if n > 0:
        for i in nums[1:-1].split(','):
            Q.append(i)
    
    error = False
    R_cnt = 0
    
    for j in command:
        if j == 'R': 
            R_cnt += 1
        elif j == 'D' and len(Q) == 0:  # ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ
            error = True
            break
        else:
            if R_cnt % 2 == 0: # ์ •๋ฐฉํ–ฅ์ผ ๊ฒฝ์šฐ
                Q.popleft() 
            else:              # ์—ญ๋ฐฉํ–ฅ์ผ ๊ฒฝ์šฐ
                Q.pop()
                
    if R_cnt % 2 == 1: 
        Q.reverse()
    
    if error:
        print('error')
    else:
        print('[' + ','.join(list(Q)) + ']')
          
    

1. ์ž…๋ ฅ

  • ์ž…๋ ฅ๋ฐ›์€ ์ •์ˆ˜๋“ค์˜ ์–‘ ๋ ๋Œ€๊ด„ํ˜ธ๋“ค์„ ์ œ๊ฑฐํ•˜๊ณ , deque์— ๋„ฃ์–ด์ค€๋‹ค.

2. ๋ช…๋ น์–ด ํ•ด์„

  • 'R'์ด ๋‚˜์˜ค๋ฉด, R_cnt๋ฅผ 1 ๋”ํ•ด์ค€๋‹ค.

  • 'D'๊ฐ€ ๋‚˜์™”๋Š”๋ฐ Q๊ฐ€ ๋นˆ ๊ฒฝ์šฐ, error๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

  • 'D'๊ฐ€ ๋‚˜์˜จ ๊ฒฝ์šฐ, ํ˜„์žฌ R_cnt๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด (= ๋’ค์ง‘ํžŒ ๊ฒฝ์šฐ) ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์ง์ˆ˜๋ผ๋ฉด (= ์›๋ž˜์˜ ๋ฐฉํ–ฅ) ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

  • ์ด๋Š” 'RR'๊ณผ ๊ฐ™์ด 'R'์ด ์ง์ˆ˜๋กœ ์—ฐ์†์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š”, ๋ฐฐ์—ด์ด ๊ธฐ์กด๊ณผ ๋™์ผํ•จ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ตœ์ข…์ ์ธ R_cnt์˜ ์ƒํƒœ๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด, ์‹ค์ œ๋กœ reverse๋ฅผ ์ง„ํ–‰ํ•ด์ค€๋‹ค.

3. ์ถœ๋ ฅ

  • ์ถœ๋ ฅ ํ˜•์‹์„ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•ด, join์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

  1. ์—ญ์‹œ ๋ ˆ๋ฒจ์ด ๋†’์•„์งˆ์ˆ˜๋ก ๊ฐ„๋‹จํ•œ ๋ฉ”์†Œ๋“œ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ์ค„์–ด๋“œ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

  2. reverse๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ’€์–ด๋‚ด๋Š” ๊ณผ์ •์ด ์ธ์ƒ์ ์ด์—ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค!

profile
๋ธ”๋กœ๊ทธ ์ด๊ด€ํ•˜์˜€์Šต๋‹ˆ๋‹ค (https://bbang.dev/)

0๊ฐœ์˜ ๋Œ“๊ธ€