1259번 문제 바로보기
"내 이름은 이효리, 거꾸로 해도 이효리". 학창시절 좋아했던 TV 프로그램 '패밀리가 떳다'가 생각난다.
앞에서부터 읽어도, 뒤에서부터 읽어도 똑같은 단어를 팰린드롬이라고 한다. 'gymyg', 'heyeh' 등이 해당한다.
각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력하는 문제다.
우선은 0이 나올때까지 while로 값을 받아 하나씩 계산할 생각이다.
입력받은 문자는 [0], [1], [2], [-1], [-2], [-3] 와 같이 문자의 위치를 지정하는 방식으로 매칭시켜 풀이를 하고자 했다.
문자의 길이가 짝수이면 딱 반으로 나누어 매칭하면 되고, 홀수면 반으로 나누었을 때 정 가운데 글자가 남지만 어차피 팰린드롬수 특성 상 정 가운데 글자는 무엇이 오든 상관 없었다! (YES!)
0부터 1씩 늘어나는 변수와 -1부터 -1씩 늘어나는 변수를 지정하여 for 문으로 이제 매칭만 시켜주면 끝이다.
from sys import stdin
while True:
word=str(stdin.readline().strip())
if word=="0": #0을 입력받으면 종료시켜야 하기 때문
break
elif len(word)==1: #처음에는 이 항목을 쓰지 않아 틀렸다.. '한 글자일 때도 팰린드롬 수가 되는 것임을 뒤늦게 알아챘다
print("yes")
continue
front=0 #0부터 1씩 늘어나는 변수
back=-1 #-1부터 -1씩 늘어나는 변수
for i in range(int(len(word)/2)): #입력받은 글자 길이의 반만 반복하여 매칭하면 끝
if word[front]!=word[back]: #팰린드롬수가 아닐 경우 바로 'no' 출력 후 빠져나온다.
print("no")
break
elif front+1==int(len(word)/2): #마지막까지 매칭이 확인 될 경우 'yes'를 출력하기 위함
print("yes")
break
front = front + 1
back = back - 1