본문 바로가기
Algorithms/코테 문풀

엘리스 - 문자열 앞뒤 검사하기(py), Palindrome

by hi-rachel 2023. 7. 18.

문제

회문(Palindrome)은 '토마토맛토마토, 다시합창합시다'와 같이 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 의미합니다. 엘리스 토끼는 이런 회문을 검사하는 기계를 만들려고 합니다.

회문 검사 방식은 아래와 같습니다.
아래처럼 길이가 인 문자열이 입력으로 주어집니다.
이때, 번째 글자와 번째 글자가 같은지 다른지를 비교합니다. 계속해서 번째 글자와 번째 글자, 번째 글자와 번째 글자 순서로 비교합니다.

지시사항을 참고하여 코드를 작성하세요.

 

지시사항

  • 사용자로부터 문자열을 입력받고 문자열의 앞에서 번째 문자와 뒤에서 번째 문자가 같은지 비교한 후 두 문자가 같다면 Same을, 다르다면 Different를 출력합니다.

 

입출력 예시

입력 예시 출력 예시
abcdba Same
Same
Different

 

Tips!

  • 문자열은 알파벳 소문자로만 이루어져 있고 길이는 반드시 짝수입니다.

풀이

아이디어

  • 문자열 배열을 뒤집어 확인해주면 앞뒤가 같은지 쉽게 확인할 수 있다.
a = list(input())

b = a[::-1]

for i in range(int(len(a)/2)):
    if a[i] == b[i]:
        print("Same")
    else:
        print("Different")

 

- 에러

처음에 문자열을 입력받아 list로 만들어주고 그 앞뒤를 바꾼 배열을 b에 저장할 생각으로 아래와 같이 작성했더니 에러가 났다.

b.reverse()

이해가 부족해 무엇이 잘못되었는지 몰랐는데 바로 밑에 있는 AI 헬피를 누르니 에러가 난 원인과 수정해야 할 부분을 정확히 알 수 있었다. AI가 교육에 도입되니 정말 편하구나.. 느꼈다. 답변도 빠르다. 

a.reverse() 코드는 a 배열만 뒤집어주고 반환값이 None이기 때문에 바로 b에 뒤집어진 a list가 할당되는 것이 아니라 None이 할당된 것이다. 내가 의도한 코드를 작성하고자 한다면

b = a[::-1]

위와 같이 작성해 a의 뒤집어진 배열을 b에 바로 할당할 수 있다. 

 


더 참고할만한 사이트:

https://www.geeksforgeeks.org/python-program-check-string-palindrome-not/,

https://www.daleseo.com/python-reversed/

 

b = ''.join(reversed(a))

위와 같이 reversed() 함수를 이용해 각 문자를 뒤집어주고 다시 붙여주는 방식으로도 가능하다.


 

출처: https://kdt.elice.io/courses/69662/lectures/584526/lecturepages/6708524