팰린드롬

Created by
  • 서경태
Created at
❓
'팰린드롬 확인여부 만들기'
팰린드롬은 '토마토', '기러기', '이효리' 처럼 거꾸로 해도 같은 글자가 나오는 것을 뜻한다.
영어에는 radar, level 등이 해당한다.
처음 문제를 보고 [0]과 [-1]를 비교하고 [1]과 [-2]를 비교하면 되겠다 싶었지만 이것을 n개까지 어떻게 이어나가는지 의문이 들었다. 나름 방법을 구상해서 요렇게 죠렇게 해봤지만 역시나 실패...
머리를 싸매다가 GPT한테 물어보기로했다.
처음엔 양심이 있어서 팰린드롬이란 단어를 언급하지 않고 굉장히 풀어서 설명했다.
봐도 이해못할 알고리즘을 던져주어서 그냥 '팰린드롬'을 입력했다.
🥧
def is_palindrome(word):
# 단어를 그대로 비교 (대소문자 구분 없이)
cleaned_word = word.lower()
# 단어가 팰린드롬인지 확인
return cleaned_word == cleaned_word[::-1]
word.lower()은 대소문자 구분없이 만들어주는 함수다.
RAder을 넣으면 rader로 반환한다.
PIZZA를 넣으면 pizza로 반환한다.
[::-1] 은 문자열을 뒤집는 파이썬 슬라이싱 기법이다.
pizza를 넣으면 azzip로 반환한다.
word를 넣으면 drow로 반환한다.
생각보다 굉장히 쉽게 팰린드롬 알고리즘을 만들수 있다.
하지만 구글링을 하면 좀 더 복잡한 알고리즘을 모범답안으로 제시해준다.
🥧
def is_palindrome(word):
for left in range(len(word) // 2):
right = len(word) - left - 1
if word[left] != word[right]:
return False
return True
먼저, range(len(word) // 2)가 word(변수)를 절반으로 나누어 왼쪽의 글자를 구한다.
radar를 넣으면 left의 0번 글자는 r가 될 것이고, left의 1번 글자는 a가 될 것이다. 그리고 이제 right = len(word) - left - 1로 오른쪽 글자를 구한다.
반복문을 고려해 다시 예시(radar)를 들어보면,
첫 번째 반복 (left = 0)
right = 5 - 0 -1 로 4가 된다.
r a d a r
↑ ↑
left=0 right=4
두 번째 반복(left =1)
right = 5 - 1 -1 = 3
r a d a r
↑ ↑
left=1 right=3
if word[left] != word[right]
이렇게 단어를 쪼개 좌/우의 단어를 비교해 일치하면 True, 불일치하면 Fasle 값을 내어준다.
한가지 재밌는 점은 대괄호[] 안에 문자를 쓴 것. 보통은 word[1] 처럼 "첫 번재 글자 보여줘" 라고 쓰는 것만 봤는데 반복문이 적용되어서 대괄호[] 안에 left, right를 사용했다.
어렵다...고 생각할 때, 문득 떠올랐다!
"이미 머리 좋은 애들이 다 만들어 놨어. 우린 그거 갖다 쓰는거야."
- 현직 개발자 친구