백준 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]로 뒤집어 원래 문자열과 비교하면 짝수·홀수 분기 없이 같은 결과를 얻을 수 있다.