본문 바로가기

Dev/BAEKJOON 백준

[백준/BOJ] 백준 코딩 알고리즘 10988번 팰린드롬인지 확인하기 Python

728x90

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1 

level

예제 출력 1 

1

예제 입력 2 

baekjoon

예제 출력 2 

0

 

 

나의 풀이

s = input()
is_pallen = True

for i in range(len(s)//2):
  if s[i] != s[-(i+1)]:
    is_pallen = False 
    break

if is_pallen:
  print(1)
else:
  print(0)

 

  • 리스트 인덱싱을 통해서 문자열의 앞부분과 뒷 부분을 차례대로 한 문자씩 비교하도록 하여, 문자열의 길이 절반만 읽도록 했다 O(N/2)
    하지만 애초에 문자열의 길이 자체가 500자 이하이기 때문에 큰 차이는 없을 듯 하다
  • 비교하는 문자가 서로 다르면 팰린드롬인지 체크하는 변수를 False로 설정하고, 반복문을 종료한다
  • 팰린드롬인지 체크하는 변수의 값에 따라 1 또는 0을 출력한다
  • 개인적으로는 코드가 좀 더 길어지더라도 문자열을 최대한 적게 읽고자 하였다

 

다른 풀이 (풀이가 좀 더 간단하다!)

s = input()

if s[::-1] == s:
    print(1)
else:
    print(0)
  • 배열을 리스트 슬라이싱을 통해 뒤집은 후, 기존 배열과 동일한지 확인한다
  • 동일하면 1을 출력하고, 그렇지 않다면 0을 출력한다
  • 위 코드에서 input 함수로 입력받으면, 문자열 형태로 저장되기 때문에 reversed(s)을 통해서 뒤집을 수도 있다 
  • 이 때 리스트 슬라이싱을 통한 방법은 O(n) reversed는 시간 복잡도 O(1)이다 (reverse는 O(n)임에 유의!)
728x90