728x90
๐๏ธ ๋ฌธ์
๐ 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์ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ค.
- ๋ฌธ์๊ฐ ๋ค๋ฅด๋ฉด ๋ค์ ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ค.
- ์ผ์ชฝ ๋ฌธ์(word[l])๋ฅผ ์ ๊ฑฐํ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ด ๋๋์ง
- ์ค๋ฅธ์ชฝ ๋ฌธ์(word[r])๋ฅผ ์ ๊ฑฐํ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ด ๋๋์ง
- ์ด๋ฅผ ํ์ธํ๊ณ ์ ์ ์ฌ ํฐ๋ฆฐ๋๋กฌ ํ์ธ ํจ์๋ฅผ ์์ฑํ๋ค.
2. ์ ์ฌ ํฐ๋ฆฐ๋๋กฌ ํ์ธ ํจ์
- ์ ๋ ฅ๋ฐ์ word[left : right + 1] ๋ถ๋ถ ๋ฌธ์์ด์ด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํ๋ค.
- while l < r ๋ฃจํ๋ฅผ ๋๋ฉด์ ๋ ๋ฌธ์๊ฐ ๋ค๋ฅด๋ฉด False๋ฅผ ๋ฐํํ๊ณ , ๋๊น์ง ๋น๊ตํ๋ฉด์ ๋ชจ๋ ๋ฌธ์๊ฐ ๊ฐ์ผ๋ฉด True๋ฅผ ๋ฐํํ๋ค.
728x90
'coding_test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11660. ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (ํ์ด์ฌ) (0) | 2025.04.14 |
---|---|
[๋ฐฑ์ค] 17270. ์ฐ์์ธ์ ํ๋ค์ด (ํ์ด์ฌ) (0) | 2025.03.27 |
[๋ฐฑ์ค] 11945. ๋จ๊ฑฐ์ด ๋ถ์ด๋นต (ํ์ด์ฌ) (0) | 2025.03.08 |
[๋ฐฑ์ค] 2675. ๋ฌธ์์ด ๋ฐ๋ณต (ํ์ด์ฌ) (0) | 2025.03.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฌ ๊ฒ์ (ํ์ด์ฌ) (0) | 2025.03.05 |