자기계발
백준
10988 · 팰린드롬인지 확인하기

백준 10988번 팰린드롬인지 확인하기

문제

알파벳 소문자로만 이루어진 단어(길이 1 이상 100 이하)가 주어진다. 앞으로 읽을 때와 거꾸로 읽을 때 같은 단어를 팰린드롬이라 하며, level과 noon은 팰린드롬이고 baekjoon, online, judge는 아니다. 팰린드롬이면 1, 아니면 0을 출력한다.

풀이

단어를 가운데 기준으로 앞 문자열과 뒤 문자열로 나누고, 뒤 문자열을 뒤집은 값이 앞 문자열과 같은지 비교한다. 길이가 짝수면 정확히 반으로 나누고, 홀수면 가운데 한 글자를 빼고 나눈다. 가운데 글자는 어느 글자여도 팰린드롬 여부에 영향을 주지 않기 때문이다.

word = input()
 
# 단어 길이가 짝수일 경우
if (len(word)%2)==0:
    # 중간 두 문자 중 첫째 문자 인덱스 (ex. abcd -> b)
    std = len(word) // 2
    # 앞 문자열 (ab)
    start_ = word[0:std]
    # 뒤 문자열 (cd)
    end_ = word[std:]
    # 앞 문자열과 뒷 문자열의 역순이 일치하면 1, 아니면 0
    if start_ == end_[::-1]:
        print(1)
    else:
        print(0)
# 단어 길이가 홀수일 경우
else:
    # 중간 문자의 인덱스  (ex. abcde -> c)
    std = len(word) // 2
    # 앞 문자열 (ab)
    start_ = word[0:std]
    # 뒤 문자열 (cd)
    end_ = word[std+1:]
    # 앞 문자열과 뒷 문자열의 역순이 일치하면 1, 아니면 0
    if start_ == end_[::-1]:
        print(1)
    else:
        print(0)

짚고 갈 점

  • 문자열 전체를 word[::-1]로 뒤집어 원래 문자열과 비교하면 짝수·홀수 분기 없이 같은 결과를 얻을 수 있다.

출처