๐Ÿ‹ โšพ๏ธ ๐Ÿ’ป ๐ŸŽฌ ๐ŸŽฎ

coding_test

[๋ฐฑ์ค€] 17609. ํšŒ๋ฌธ (ํŒŒ์ด์ฌ)

aeightchill 2025. 3. 25. 23:24
728x90

 

 

 

๐Ÿ—‚๏ธ   ๋ฌธ์ œ 

17609. ํšŒ๋ฌธ



๐Ÿ“Œ   Point

Two Pointer

 

  • ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ž์—ด์ด ๋Œ€์นญ์ธ์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
  • ๋Œ€์นญ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ๊ฐ๊ฐ ํฌ์ธํ„ฐ๋ฅผ ๋‘๊ณ  ์ค‘๊ฐ„ ๋ฌธ์ž๊นŒ์ง€ ๊ฐ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค.

 

https://youngone-kang.tistory.com/30

 

[Algorithm] Two Pointers (ํˆฌ ํฌ์ธํ„ฐ)

Two Pointers๋ฆฌ์ŠคํŠธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๋‘ ๊ฐœ์˜ ์ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์‹œ์ž‘์ ๊ณผ ๋์  2๊ฐœ์˜ ์ ์œผ๋กœ ์ ‘๊ทผํ•  ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. (์‘์šฉ๋ฌธ์ œ) _ ํŠน์ •ํ•œ ํ•ฉ์„ ๊ฐ€

youngone-kang.tistory.com

 

 

 

 

 


๐Ÿ“„   ์ฝ”๋“œ

def main():
    T = int(input())
    
    # ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜
    def is_palindrome(word):
        l, r = 0, len(word) - 1
        while l < r:
            if word[l] == word[r]:
                l += 1
                r -= 1
            else:
                # ์™ผ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ ํ›„ ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธ
                if is_palindrome_after_removal(word, l + 1, r):
                    return 1 # ์œ ์‚ฌ ํšŒ๋ฌธ
                # ์˜ค๋ฅธ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ ํ›„ ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธ
                if is_palindrome_after_removal(word, l, r - 1):
                    return 1 # ์œ ์‚ฌ ํšŒ๋ฌธ
                return 2 # ํšŒ๋ฌธ ์•„๋‹˜
        return 0 # ํšŒ๋ฌธ
    
    # ํ•œ ๊ธ€์ž๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
    def is_palindrome_after_removal(word, left, right):
        while left < right:
            if word[left] != word[right]:
                return False
            left += 1
            right -= 1
        return True
    
    for _ in range(T):
        word = input()
        result = is_palindrome(word)
        print(result)

if __name__ == "__main__":
    main()

โœ๐Ÿป   ํ’€์ด

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)

 

 

1.  ํŒฐ๋ฆฐ๋“œ๋กฌ ํŒ๋ณ„ ํ•จ์ˆ˜

์ž…๋ ฅ ๋ฌธ์ž์—ด์ด ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ค‘ ์–ด๋””์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํŒ๋ณ„ํ•œ๋‹ค.

  • 0  :  ํŒฐ๋ฆฐ๋“œ๋กฌ
  • 1   :  ํ•œ ๊ธ€์ž ์‚ญ์ œํ•˜๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋˜๋Š” ์œ ์‚ฌ ํŒฐ๋ฆฐ๋“œ๋กฌ
  • 2  :  ํŒฐ๋ฆฐ๋“œ๋กฌ X
ํˆฌ ํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ ํŒ๋ณ„

 

  • l, r = 0, len(word)-1๋กœ ์ดˆ๊ธฐํ™”
    • ์™ผ์ชฝ(l), ์˜ค๋ฅธ์ชฝ(r)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ l += 1, r -= 1๋กœ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ฉฐ ๊ฐ€์šด๋ฐ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๋น„๊ตํ•œ๋‹ค.
  • while l < r ๋ฃจํ”„
    • ๊ฐ ํฌ์ธํ„ฐ์˜ ๋ฌธ์ž๊ฐ€ ๊ฐ™์œผ๋ฉด l์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ r์€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
    • ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค์Œ ๋‘ ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•œ๋‹ค.
      1. ์™ผ์ชฝ ๋ฌธ์ž(word[l])๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋˜๋Š”์ง€
      2. ์˜ค๋ฅธ์ชฝ ๋ฌธ์ž(word[r])๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋˜๋Š”์ง€
    • ์ด๋ฅผ ํ™•์ธํ•˜๊ณ ์ž ์œ ์‚ฌ ํŒฐ๋ฆฐ๋“œ๋กฌ ํ™•์ธ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

2.  ์œ ์‚ฌ ํŒฐ๋ฆฐ๋“œ๋กฌ ํ™•์ธ ํ•จ์ˆ˜

  • ์ž…๋ ฅ๋ฐ›์€ word[left : right + 1] ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • while l < r ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ๋‘ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋๊นŒ์ง€ ๋น„๊ตํ•˜๋ฉด์„œ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ๊ฐ™์œผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

 

728x90