์•Œ๊ณ ๋ฆฌ์ฆ˜/์„ ํ˜•๊ตฌ์กฐ

[๋ฐฑ์ค€ 9549 ๐Ÿฅˆ] ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ

1eehyunji 2023. 8. 24. 01:01

๋ฌธ์ œ

์ƒˆ๋กœ์šด ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

์šฐ์„ , ๋ชจ๋“  ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•ญ์ƒ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  1. ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ธ€์ž๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ 0๋ฒˆ ๋˜๋Š” ์›ํ•˜๋Š” ๋งŒํผ ์–ผ๋งˆ๋“ ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. 1๋ฒˆ ๊ณผ์ •์˜ ๊ฒฐ๊ณผ๋ฌผ ์•ž๋ถ€๋ถ„์— 0๊ฐœ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ๋ฌธ์ž๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  3. 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'๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 
  • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.