๐Ÿงญ KAIST JUNGLE/Algorithm

[๋ฐฑ์ค€] 12904 - A์™€ B (#ํŒŒ์ด์ฌ #ํˆฌ ํฌ์ธํ„ฐ ํ’€์ด)

seungineer = seungwoo + engineer 2024. 8. 4. 16:13

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•œ ํ›„์— ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋ฉฐ ํšจ๊ณผ์ ์ธ ํ’€์ด์—ˆ๋Š”์ง€ ํ•ญ์ƒ ํ™•์ธํ•œ๋‹ค.
"12904 ํŒŒ์ด์ฌ" ํ‚ค์›Œ๋“œ๋กœ ๊ตฌ๊ธ€๋ง ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ reverse(), array slice๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด ๋ฐ–์— ์—†์–ด์„œ ํ’€์ด์˜ ๋‹ค์–‘์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํˆฌ ํฌ์ธํ„ฐ ํ’€์ด์— ๋Œ€ํ•ด ์ž‘์„ฑํ•œ๋‹ค.

Intuition

1. S๋ฅผ T๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ? โžก๏ธ T๋ฅผ S๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ?

๋ฌธ์ œ์—์„œ๋Š” S๋ฅผ T๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด '๋ฌธ์ž์—ด์˜ ๋’ค์— A๋ฅผ ์ถ”๊ฐ€'ํ•˜๊ฑฐ๋‚˜ '๋ฌธ์ž์—ด์„ ๋’ค์ง‘๊ณ  ๋’ค์— B๋ฅผ ์ถ”๊ฐ€'ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๋‘ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด S๋ฅผ T๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๋ฌธ์ž์—ด์˜ ๋’ค์— A ํ˜น์€ B๊ฐ€ ์žˆ์„ ๋•Œ, A๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฌธ์ž์—ด์— ๊ณง๋ฐ”๋กœ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๊ณ  B๊ฐ€ ์žˆ๋‹ค๋ฉด ๋’ค์ง‘ํ˜€์„œ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์ด์ „ ์ƒํƒœ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ T๋ฅผ S๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€๋กœ ๋ฌธ์ œ๋ฅผ ๋ฐ”๊ฟ” ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋ฌธ์ž์—ด์—์„œ ๋ฌธ์ž๊ฐ€ ๋น ์ง„ ์…ˆ ์น˜๊ธฐ, ๋ฌธ์ž์—ด์ด ๋’ค์ง‘ํžŒ ์…ˆ ์น˜๊ธฐ

T๋ฅผ S๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ฌธ์ž์—ด์„ ์ง์ ‘ ์กฐ์ž‘ํ•  ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ผ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ๊ณผ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋งŒ ์กฐ์ž‘ํ•˜์—ฌ ๋งˆ์น˜ ๋ฌธ์ž์—ด์ด ์กฐ์ž‘๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ€์ •ํ•˜๋„๋ก ํ•œ๋‹ค. ๋ฌธ์ž์—ด์—์„œ 'A'๋ฅผ ๋นผ๋Š” ๊ฒŒ ์•„๋‹Œ ๋น ์ง„ ์…ˆ ์น  ์ˆ˜ ์žˆ๋„๋ก ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ , 'B'๋ฅผ ๋นผ๋Š” ๊ฒŒ ์•„๋‹Œ ๋น ์ง„ ์…ˆ ์น  ์ˆ˜ ์žˆ๋„๋ก ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ๋’ค์ง‘์–ด์„œ ์ฝ์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.

Approach

  1. front ํฌ์ธํ„ฐ์™€ back ํฌ์ธํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ด ๋‘ ํฌ์ธํ„ฐ ๊ฐ„ ๊ฑฐ๋ฆฌ๊ฐ€ S์˜ ๊ธธ์ด์™€ ๊ฐ™์•„์งˆ ๋•Œ ์กฐ์ž‘์„ ๋ฉˆ์ถ˜๋‹ค.
  2. ๋’ค์ง‘์–ด์ง„ ์…ˆ ์ณ์•ผํ•œ๋‹ค๋ฉด, front ํฌ์ธํ„ฐ์˜ ๋ฌธ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜๊ณ , ์ œ๋Œ€๋กœ ๋†“์—ฌ ์žˆ๋‹ค๋ฉด, back ํฌ์ธํ„ฐ์˜ ๋ฌธ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
    1. ๋ฌธ์ž๊ฐ€ 'A'์ด๋ฉด ์ƒ๋Œ€ ํฌ์ธํ„ฐ์— ๋” ๊ฐ€๊น๊ฒŒ ์กฐ์ž‘ํ•œ๋‹ค.
    2. ๋ฌธ์ž๊ฐ€ 'B'์ด๋ฉด ์ƒ๋Œ€ ํฌ์ธํ„ฐ์— ๋” ๊ฐ€๊น๊ฒŒ ์กฐ์ž‘ํ•จ๊ณผ ํ•จ๊ป˜ isFlipped ์ƒํƒœ๋ฅผ ๋ฐ˜์ „ํ•œ๋‹ค.
  3. ์กฐ์ž‘์„ ๋ฉˆ์ท„์„ ๋•Œ, ๋ฌธ์ž์—ด์ด '๋’ค์ง‘์–ด์ ธ ์žˆ๋‹ค ๊ฐ€์ •'ํ•ด์•ผ ํ•˜๋Š”์ง€, '์ œ๋Œ€๋กœ ๋†“์—ฌ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •'ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” isFlipped ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

Complexity

Time Complexity

  • O(|T|) : ์ตœ์•…์˜ ๊ฒฝ์šฐ T์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•จ

Space Complexity

  • O(|T|): ์ž…๋ ฅ ๋ฌธ์ž์—ด S์™€ T๊ฐ€ ์žˆ์œผ๋‚˜ ํ•ญ์ƒ S<T ์ž„

Code

1. front ํฌ์ธํ„ฐ์™€ back ํฌ์ธํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ๋’ค์ง‘ํ˜€์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•จ๊ณผ ๋™์‹œ์— ์ƒ๋Œ€ ํฌ์ธํ„ฐ์™€ ๊ฐ€๊นŒ์›Œ์ง„๋‹ค.

S = input()
T = input()

len_s = len(S)
len_t = len(T)

back_ptr = len_t - 1
front_ptr = 0
isFlipped = False
while len_s != (back_ptr-front_ptr + 1):
    if not isFlipped:
        if T[back_ptr] != 'A':
            isFlipped = not isFlipped
        back_ptr -= 1
    else:
        if T[front_ptr] != 'A':
            isFlipped = not isFlipped
        front_ptr += 1

2. ์กฐ์ž‘์„ ๋ฉˆ์ท„์„ ๋•Œ(=ํฌ์ธํ„ฐ ๊ฐ„ ๊ฑฐ๋ฆฌ์™€ S ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์„ ๋•Œ) ํฌ์ธํ„ฐ์—์„œ๋ถ€ํ„ฐ ๋ฌธ์ž๋ฅผ ์ฝ์œผ๋ฉฐ S์™€ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค.

isFind = False
if isFlipped:
    for k in range(len_s):
        if S[k] != T[back_ptr - k]:
            print(0)
            isFind = True
            break
    if not isFind:
        print(1)
else:
    for k in range(len_s):
        if S[k] != T[front_ptr + k]:
            print(0)
            isFind = True
            break
    if not isFind:
        print(1)

๊ฒฐ๊ณผ

  • ํ•œ ๋ฒˆ ์˜ค๋‹ต์ด ๋ฐœ์ƒํ–ˆ๋˜ ์ด์œ ๋Š” isFlipped ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผœ์ค„ ๋•Œ `not isFlipped` ๊ฐ€ ์•„๋‹Œ `True`๋กœ ๊ณ ์ •์‹œ์ผœ ๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ดˆ๊ธฐ๊ฐ’์ด `False`์ด๋‹ค ๋ณด๋‹ˆ `True`๋กœ ๋ฐ”๊พธ๋ฉด ์ƒํƒœ๊ฐ€ ๊ด€๋ฆฌ๋œ๋‹ค๊ณ  ์ฐฉ๊ฐํ–ˆ๋‹ค.