๋ฌธ์
ํ๋ฌธ(ๅๆ) ๋๋ ํฐ๋ฆฐ๋๋กฌ(palindrome)์ ์ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ณผ ๋ ๊ฐ์ ์์์ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ‘abba’ ‘kayak’, ‘reviver’, ‘madam’์ ๋ชจ๋ ํ๋ฌธ์ด๋ค. ๋ง์ผ ๊ทธ ์์ฒด๋ ํ๋ฌธ์ด ์๋์ง๋ง ํ ๋ฌธ์๋ฅผ ์ญ์ ํ์ฌ ํ๋ฌธ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ฌธ์์ด์ด๋ผ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฐ ๋ฌธ์์ด์ “์ ์ฌํ๋ฌธ”(pseudo palindrome)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค์ด ‘summuus’๋ 5๋ฒ์งธ๋ ํน์ 6๋ฒ์งธ ๋ฌธ์ ‘u’๋ฅผ ์ ๊ฑฐํ์ฌ ‘summus’์ธ ํ๋ฌธ์ด ๋๋ฏ๋ก ์ ์ฌํ๋ฌธ์ด๋ค.
์ฌ๋ฌ๋ถ์ ์ ์๋ ๋ฌธ์์ด์ ๋ถ์ํ์ฌ ๊ทธ๊ฒ์ด ๊ทธ ์์ฒด๋ก ํ๋ฌธ์ธ์ง, ๋๋ ํ ๋ฌธ์๋ฅผ ์ญ์ ํ๋ฉด ํ๋ฌธ์ด ๋๋ “์ ์ฌํ๋ฌธ”์ธ์ง, ์๋๋ฉด ํ๋ฌธ์ด๋ ์ ์ฌํ๋ฌธ๋ ์๋ ์ผ๋ฐ ๋ฌธ์์ด์ธ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค. ๋ง์ผ ๋ฌธ์์ด ๊ทธ ์์ฒด๋ก ํ๋ฌธ์ด๋ฉด 0, ์ ์ฌํ๋ฌธ์ด๋ฉด 1, ๊ทธ ์ธ๋ 2๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ T(1 ≤ T ≤ 30)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ ์ค๋ถํฐ T๊ฐ์ ์ค์ ๊ฑธ์ณ ํ ์ค์ ํ๋์ ๋ฌธ์์ด์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 3 ์ด์ 100,000 ์ดํ์ด๊ณ , ์๋ฌธ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
๊ฐ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง, ์ ์ฌ ํ๋ฌธ์ธ์ง, ๋ ๋ชจ๋ ํด๋น๋์ง ์๋์ง๋ฅผ ํ๋จํ์ฌ ํ๋ฌธ์ด๋ฉด 0, ์ ์ฌ ํ๋ฌธ์ด๋ฉด 1, ๋ ๋ชจ๋ ์๋๋ฉด 2๋ฅผ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/17609
๐ก ํ์ด ๋ฐ ์ฝ๋
string = []
n = int(input())
for _ in range(n):
string.append(input())
def palindrome(s, e, temp):
while s <= e:
if str[s] == str[e]:
s += 1
e -= 1
else:
if temp == 0:
left = palindrome(s+1, e, temp+1)
right = palindrome(s, e-1, temp+1)
return min(left, right)
else:
return 2
return temp
result = []
for str in string:
s, e = 0, len(str)-1
result.append(palindrome(s, e, 0))
for r in result:
print(r)
๋จ์ ๊ตฌํ ๋ฌธ์ ์ด์ง๋ง ์ฌ๊ท์ ๋ํ ๋ณต์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
๋งจ ์ฒ์์ ๋ฌธ์์ด์ ์์์ ์ ๊ฐ๋ฆฌํค๋ ๋ณ์ s์ ๋์ ์ ๊ฐ๋ฆฌํค๋ ๋ณ์ e์ ๋ํ์ฌ s๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์(str[s])์ e๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์(str[e])๊ฐ ๊ฐ์ผ๋ฉด s+1, e-1๋ก ํฌ์ธํฐ๋ฅผ ์ฎ๊ฒจ์ฃผ๊ณ , ๋ง์ฝ ๋ ๋ฌธ์๊ฐ ๋ค๋ฅด๋ค๋ฉด s์ e๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์๊ฐ ์๋ก ๋ฌ๋๋ ํ์๋ฅผ ๋ํ๋ด๋ temp์ ๋ฐ๋ผ์ ๊ฒฝ์ฐ๋ฅผ ๋ค์ ๋๋ ์ค๋ค. temp๊ฐ 1์ด์์ด๋ผ๋ฉด ๋ฌธ์ ํ๋๋ฅผ ์ญ์ ํด๋ ํ๋ฌธ์ด ์๋๋ฏ๋ก 2๋ฅผ ๋ฐํํ๋ค. temp๊ฐ 0์ด๋ฉด ์ฌ๊ท๋ฅผ ํตํด ํ๋ฒ์ s๋ง s+1๋ก ์ฎ๊ฒจ ๋๋จธ์ง ๋ฌธ์๋ค์ด ํ๋ฌธ์ธ์ง ํ๋ณ(left)ํ๊ณ , ๋ ํ๋ฒ์ e๋ง e-1๋ก ์ฎ๊ฒจ์ฃผ์ด ํ๋ฌธ์ธ์ง ํ๋ณ(right)ํ์ฌ ๋ ๊ฒฝ์ฐ์ ๋ฐํ๊ฐ ์ค ์์ ๊ฐ์ ์ต์ข ๋ฌธ์์ด์ ๋ฐํ๊ฐ ์ฆ, ํ๋ฌธ ํ๋ณ ๊ฐ์ผ๋ก ์ ํํ๋ค. ์๋ฅผ ๋ค์ด, s+1๋ก ์ฎ๊ฒจ ํ๋ณํ ๊ฒฝ์ฐ(left) ๋๋จธ์ง๊ฐ ํ๋ฌธ์ด์ด์ 1์ด, e-1๋ก ์ฎ๊ฒจ ํ๋ณํ ๊ฒฝ์ฐ(right) ๋๋จธ์ง๊ฐ ํ๋ฌธ์ด ์๋์ด์ 2๊ฐ ๋ฐํ๋๋ค๋ฉด ์ด ๋ฌธ์์ด์ ์ ์ฌํ๋ฌธ์ด๋ฏ๋ก 1์ ๋ฐํํ๊ฒ ๋๋ค. ์ด๋, ์ฒ์๋ถํฐ ํ๋ฌธ์ธ ๊ฒฝ์ฐ์๋ temp์ ์ด๊ธฐ๊ฐ์ธ 0์ด ๊ทธ๋๋ก ๋ฐํ๋๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 15686๋ฒ ์นํจ ๋ฐฐ๋ฌ - ํ์ด์ฌ(Python) (0) | 2022.01.07 |
---|---|
[BOJ] ๋ฐฑ์ค 14503๋ฒ ๋ก๋ด ์ฒญ์๊ธฐ - ํ์ด์ฌ(Python) (1) | 2022.01.07 |
[BOJ] ๋ฐฑ์ค 16400๋ฒ ์์ ํํ - ํ์ด์ฌ(Python) (0) | 2021.12.31 |
[BOJ] ๋ฐฑ์ค 2293๋ฒ ๋์ 1 - ํ์ด์ฌ(Python) (0) | 2021.12.31 |
[BOJ] ๋ฐฑ์ค 3107๋ฒ IPv6 - ํ์ด์ฌ(Python) (0) | 2021.12.29 |