๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ’ก

7. ๊ต์œก ๊ณผ์ • ์„ค๊ณ„(ํ)_ํŒŒ์ด์ฌ

by @ENFJ 2025. 2. 18.

์ „์ฒด์ฝ”๋“œ

import sys
from collections import deque
# ์ž…๋ ฅ ๊ฐ’
# CBA
# 3
# CBDAGE
# FGCDAB
# CTSBDEA
sys.stdin=open("C:\\input.txt",'rt')

need = input()
n = int(input())

for i in range(n):
    plan = input()
    dq=deque(need)
    for x in plan:
        if x in dq:
            if x != dq.popleft():
                print("#%d NO" %(i+1))
                break
    else:
        if len(dq) == 0:
            print("#%d YES" %(i+1))
        else:
            print("#%d NO" %(i+1))

1๏ธโƒฃ ์ž…๋ ฅ ์ฒ˜๋ฆฌ

import sys from collections import deque sys.stdin = open("C:\\input.txt", 'rt') # ํŒŒ์ผ์—์„œ ์ž…๋ ฅ์„ ์ฝ์–ด์˜ค๋Š” ์ฝ”๋“œ (์‹ค์ œ ์‹คํ–‰ ์‹œ ํ•„์š” ์—†์„ ์ˆ˜๋„ ์žˆ์Œ)
 
  • sys.stdin=open("C:\\input.txt",'rt')๋Š” ํŒŒ์ผ์—์„œ ์ž…๋ ฅ์„ ๋ฐ›๋„๋ก ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ์ธ๋ฐ, ์ด๋Š” ์˜จ๋ผ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์–ด์š”. ๋ณดํ†ต์€ input()์œผ๋กœ ์ž…๋ ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • from collections import deque: deque(๋ฑ)๋Š” ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ์–‘์ชฝ์—์„œ ๋น ๋ฅด๊ฒŒ ์‚ฝ์ž…/์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ํ(Queue)์ฒ˜๋Ÿผ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ํ•„์š”ํ•œ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

need = input() # ํ•„์ˆ˜ ๊ณผ๋ชฉ ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด 
n = int(input()) # ๊ฒ€์‚ฌํ•  ๊ต์œก ๊ณผ์ • ์ˆ˜
  • need: ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ณผ๋ชฉ์˜ ์ˆœ์„œ (์˜ˆ์ œ์—์„œ๋Š” "CBA")
  • n: ์ฃผ์–ด์ง„ ๊ณ„ํš์˜ ๊ฐœ์ˆ˜

3๏ธโƒฃ ๊ฐ ๊ต์œก ๊ณผ์ • ๊ณ„ํš์„ ๊ฒ€์‚ฌ

for i in range(n): plan = input() # ๊ต์œก ๊ณผ์ • ๊ณ„ํš 
dq = deque(need) # ํ•„์ˆ˜ ๊ณผ๋ชฉ ์ˆœ์„œ๋ฅผ ํ(๋ฑ)๋กœ ๋ณ€ํ™˜
 
  • ์ฃผ์–ด์ง„ ๊ต์œก ๊ณผ์ • plan์ด need์˜ ์ˆœ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • deque(need): ํ•„์ˆ˜ ๊ณผ๋ชฉ์„ ๋ฑ(deque)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, ๋งจ ์•ž์—์„œ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๋ฉฐ ์ฒ˜๋ฆฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

4๏ธโƒฃ ๊ต์œก ๊ณผ์ • ๊ฒ€์ฆ

for x in plan: # ๊ต์œก ๊ณผ์ •์˜ ๊ฐ ๋ฌธ์ž(๊ณผ๋ชฉ)๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธ 
	if x in dq: # ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ํ•„์ˆ˜ ๊ณผ๋ชฉ ๋ชฉ๋ก์— ์žˆ๋Š”์ง€ ํ™•์ธ 
		if x != dq.popleft(): # ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ 
			print("#%d NO" % (i+1)) break
  • plan์„ ํ•œ ๊ธ€์ž์”ฉ ํ™•์ธํ•˜๋ฉด์„œ need์˜ ์ˆœ์„œ๋ฅผ ๋งŒ์กฑํ•˜๋Š”์ง€ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
  • if x in dq: ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ need์˜ ์ผ๋ถ€๋ผ๋ฉด, ์ˆœ์„œ๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • if x != dq.popleft():
    • dq.popleft()๋Š” ๋ฑ์˜ ๋งจ ์•ž ๋ฌธ์ž๋ฅผ ๊บผ๋‚ด๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • x๊ฐ€ dq์˜ ๋งจ ์•ž ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ˆœ์„œ๋ฅผ ์–ด๊ธด ๊ฒƒ์ด๋ฏ€๋กœ NO๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  break๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ž๋Š”์ง€ ์ตœ์ข… ํŒ๋‹จ

else: # break ์—†์ด for๋ฌธ์„ ๋๊นŒ์ง€ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ 
	if len(dq) == 0: # ๋ชจ๋“  ํ•„์ˆ˜ ๊ณผ๋ชฉ์„ ๋‹ค ๋ฐฐ์šด ๊ฒฝ์šฐ 
		print("#%d YES" % (i+1)) 
	else: # ์•„์ง ๋‚จ์€ ํ•„์ˆ˜ ๊ณผ๋ชฉ์ด ์žˆ๋‹ค๋ฉด ์‹คํŒจ 
		print("#%d NO" % (i+1))
  • for ๋ฃจํ”„๊ฐ€ break ์—†์ด ๋๊นŒ์ง€ ์‹คํ–‰๋˜๋ฉด else ๋ธ”๋ก์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • len(dq) == 0์ด๋ฉด ๋ชจ๋“  ํ•„์ˆ˜ ๊ณผ๋ชฉ์„ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ํ•™์Šตํ•œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ YES ์ถœ๋ ฅ.
  • dq์— ๋‚จ์•„ ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•„์ˆ˜ ๊ณผ๋ชฉ์„ ๋‹ค ๋“ฃ์ง€ ์•Š์€ ๊ฒƒ์ด๋ฏ€๋กœ NO ์ถœ๋ ฅ.

6๏ธโƒฃ ์˜ˆ์ œ ์‹คํ–‰

์ž…๋ ฅ

 
CBA 3
CBDAGE
FGCDAB
CTSBDEA

์‹คํ–‰ ๊ณผ์ •

1๏ธโƒฃ ์ฒซ ๋ฒˆ์งธ ๊ณผ์ •: "CBDAGE"

ํ•„์ˆ˜ ๊ณผ์ •: CBA
๊ณผ์ • ๊ฒ€ํ† :

  • C → B → D (์ˆœ์„œ์ƒ B ๋‹ค์Œ์— D๊ฐ€ ๋‚˜์™€์„œ ํ‹€๋ฆผ) → #1 NO

2๏ธโƒฃ ๋‘ ๋ฒˆ์งธ ๊ณผ์ •: "FGCDAB"

ํ•„์ˆ˜ ๊ณผ์ •: CBA
๊ณผ์ • ๊ฒ€ํ† :

  • C → B → A (์ˆœ์„œ๋Œ€๋กœ ์ž˜ ๋‚˜์˜ด) → #2 YES

3๏ธโƒฃ ์„ธ ๋ฒˆ์งธ ๊ณผ์ •: "CTSBDEA"

ํ•„์ˆ˜ ๊ณผ์ •: CBA
๊ณผ์ • ๊ฒ€ํ† :

  • C → B → D (์ˆœ์„œ ํ‹€๋ฆผ) → #3 NO

์ถœ๋ ฅ ๊ฒฐ๊ณผ

 
#1 NO
#2 YES
#3 NO

7๏ธโƒฃ ์ •๋ฆฌ

  • deque๋ฅผ ์ด์šฉํ•ด ํ•„์ˆ˜ ๊ณผ๋ชฉ ์ˆœ์„œ๋ฅผ ํ์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์‚ฌ.
  • popleft()๋ฅผ ์‚ฌ์šฉํ•ด ์ •ํ™•ํ•œ ์ˆœ์„œ๋ฅผ ์ฒดํฌ.
  • for-else ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ break ์—†์ด ๋๊นŒ์ง€ ์ง„ํ–‰๋œ ๊ฒฝ์šฐ๋งŒ YES ์ถœ๋ ฅ.