[๋ฐฑ์ค 9549 ๐ฅ] ์ํธํ๋ ๋น๋ฐ๋ฒํธ
๋ฌธ์
์๋ก์ด ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋์๋ค.
์ฐ์ , ๋ชจ๋ ๋น๋ฐ๋ฒํธ๋ ํญ์ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง๋ค๊ณ ๊ฐ์ ํ์.
์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ค.
- ๋น๋ฐ๋ฒํธ์ ์๋ก ๋ค๋ฅธ ๋ ๊ธ์๋ฅผ ๊ตํํ๋ค. ์ด ๊ณผ์ ์ 0๋ฒ ๋๋ ์ํ๋ ๋งํผ ์ผ๋ง๋ ์ง ํ ์ ์๋ค.
- 1๋ฒ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฌผ ์๋ถ๋ถ์ 0๊ฐ ํน์ ๊ทธ ์ด์์ ๋ฌธ์๋ฅผ ์ฝ์ ํ๋ค.
- 2๋ฒ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฌผ ๋ท๋ถ๋ถ์ 0๊ฐ ํน์ ๊ทธ ์ด์์ ๋ฌธ์๋ฅผ ์ฝ์ ํ๋ค.
3๋ฒ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์ํธํ๋ ๋น๋ฐ๋ฒํธ์ด๋ค.
์ฒญํธ๋ ์ฌ์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ค์ ์ ์๊ณ ๋ฆฌ์ฆ๋๋ก ๋ค ์ํธํํ๋ค.
ํ์ง๋ง ์์์ ์ด์๋ ํ์ ์ค์๊ฐ ์์ ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ฌ ์ ๋๋ก ์ํธํํ๋์ง ํ์ธํด๋ณด๋ ค ํ๋ค.
์ํธํ๋ ๋น๋ฐ๋ฒํธ์ ์๋์ ๋น๋ฐ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ฉด, ์ํธํ๋ ๋น๋ฐ๋ฒํธ๊ฐ ์๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ์๊ณ ๋ฆฌ์ฆ๋๋ก ์ํธํํ ๊ฒฐ๊ณผ๋ฌผ์ผ ์ ์๋์ง ํน์ ์๋์ง๋ฅผ ์์๋ด ๋ณด์.
์ ๋ ฅ
์ฒซ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ( 1 ≤ T ≤ 100 )
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ๋ ์ค๋ก ๊ตฌ์ฑ๋๋ค.
์ฒซ ์ค์ ์ํธํ๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค์ ์๋์ ๋น๋ฐ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
์ํธํ๋ ๋น๋ฐ๋ฒํธ์ ์๋์ ๋น๋ฐ๋ฒํธ๋ 1๊ฐ ์ด์ 10๋ง๊ฐ ์ดํ์ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ํญ์ ์ํ๋ฒณ ์๋ฌธ์๋ง์ ํฌํจํ๋ค.
์ํธํ๋ ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ ํญ์ ์๋ ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค, ์๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌธ์ ์์ ์ค๋ช ํ ์๊ณ ๋ฆฌ์ฆ๋๋ก ์ํธํํ์ ๋ ์ฃผ์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ด ๋์ฌ ์ ์๋ค๋ฉด YES๋ฅผ, ๊ทธ๋ ์ง ์๋ค๋ฉด NO๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
from collections import deque
n=int(sys.stdin.readline())
for _ in range(n):
# ์ํธํ๋ ๋ฌธ์์ด
encode=list(sys.stdin.readline().strip())
# ๊ธฐ์กด ๋ฌธ์์ด
decode=list(sys.stdin.readline().strip())
encode_numbers=[0]*(26)
decode_numbers=[0]*(26)
stack=deque()
for idx in range(len(decode)):
# 'a'์ ์์คํค์ฝ๋
encode_numbers[ord(encode[idx])-97]+=1
stack.append(encode[idx])
decode_numbers[ord(decode[idx])-97]+=1
if len(encode)==len(decode):
if encode_numbers == decode_numbers:
print('YES')
else:
print('NO')
continue
for i in range(len(decode),len(encode)):
# ์ ์ผ ์ ๋ฌธ์์ด ๋นผ๊ณ ๋ฌธ์ ๊ฐ์ ์ญ์
encode_numbers[ord(stack.popleft())-97]-=1
# ๋ค์ ๋ฌธ์์ด ๋ฃ๊ณ ๋ฌธ์ ๊ฐ์ ์ถ๊ฐ
stack.append(encode[i])
encode_numbers[ord(encode[i])-97]+=1
if encode_numbers==decode_numbers:
print('YES')
break
else:
print('NO')
- ์ํธํ๋ ๋ฌธ์์ด์์ ๊ธฐ์กด ๋ฌธ์์ด ๊ธธ์ด์ substring ์ค ๊ฐ ์ํ๋ฒณ์ ๊ฐ์๊ฐ ๊ฐ์ substring์ด ์์ผ๋ฉด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ค.
- ์ด๋ฅผ ์ํด์ ์ํ๋ฒณ์ ์์คํค์ฝ๋๋ฅผ ์ด์ฉํด์ ์ํ๋ฒณ๋ณ๋ก ๋ช ๊ฐ๊ฐ ์๋์ง ์ ์ฅํ ์ ์๋ encode_numbers์ decode_numbers๋ฅผ ์ฌ์ฉํ๋ค.
- ์๋ฌธ์ ์ํ๋ฒณ์ ๊ฐ์๊ฐ ์ด 26๊ฐ์ด๋ฏ๋ก [0]*26์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ฒ์์ ๊ธฐ์กด ๋ฌธ์์ด์ด ์ ์ฅ๋ decode ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๋๋ฉด์ decode ๋ฌธ์์ด์ ๊ฐ ์ํ๋ฒณ ๊ฐ์๋ฅผ decode_numbers์ ์ ์ฅํ๊ณ , encode_numbers์ encode ๋ฌธ์์ด์์ ์ฒ์๋ถํฐ decode ๋ฐฐ์ด๋งํผ์ substring์ ๊ฐ ์ํ๋ฒณ ๊ฐ์๋ฅผ ์ ์ฅํ๊ณ , stack์ ๋ฃ์ด์ค๋ค.
- ์ด๋ ์ธ๋ฑ์ฑํ๋ ๋ฐฉ๋ฒ์ ord()๋ฅผ ์ด์ฉํด์ ์ํ๋ฒณ์ ์์คํค์ฝ๋๋ก ๋ฐ๊พธ๊ณ , 'a'์ ์์คํค์ฝ๋์ธ 97์ ๋นผ์ค๋ค.
- ์ด์ ์ด๊ธฐ stack์ ์ ์ฅ๋ encode[:len(decode)]๋ฅผ ๋ค์ ์ํ๋ฒณ๋ถํฐ ํ๋์ฉ ๋ฃ์ด์ฃผ๊ณ (append) ์ ์ผ ์์ ์ํ๋ฒณ์ ๋นผ์ฃผ๋ฉด์(popleft) encode_numbers๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
- ์ ๋ฐ์ดํธ๋ encode_numbers๊ฐ decode_numbers์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ฉด 'YES'๋ฅผ ์ถ๋ ฅํ๊ณ for๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
- ์ด for๋ฌธ์ด ๋ชจ๋ ๋ ๋๊น์ง ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ substring์ด ์๋ค๋ฉด 'NO'๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ฌ๊ธฐ์, ์์ธ์ ์ผ๋ก encode์ decode์ ๊ธธ์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ for๋ฌธ์ ๋๊ธฐ ์ ์ encode_numbers์ decode_numbers๋ฅผ ๋น๊ตํด์ ๊ฐ์ผ๋ฉด 'YES', ๋ค๋ฅด๋ฉด 'NO'๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ด๋ฌํ ๋ฐฉ์์ ๊ทธ๋ ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.