[백준-파이썬] 1259번 팰린드롬수 : 내 이름은 이효리

Chanyoung Lee·2021년 6월 6일
0

백준

목록 보기
2/6

문제

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

리뷰

  1. 한 글자일 경우를 미리 생각하지 못해 문제를 틀렸었다. 가정에 오류는 없는지 한번 쯤 미리 생각할 것.
profile
함께 일하는 가치를 아는 사람

0개의 댓글