코딩(Coding)/백준 문제풀이

[백준] 10174번: 팰린드롬

J.S.Y 2020. 12. 29. 10:20
728x90

링크: www.acmicpc.net/problem/10174

팰린드롬

문제

팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 단어나 숫자들을 말한다. 일반적으로 대소문자를 구분하지 않지만, 공백은 구분한다.

다음은 팰린드롬의 예시이다.

  • Anna
  • Harrah
  • Arora
  • Nat tan
  • 9998999
  • 123 321
  • $$$&&$$$

모든 라인에 대해 팰린드롬인지 아닌지를 구분하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 n이 주어진다.

각 테스트 케이스는 한 줄의 텍스트로 이루어져있으며, 비어있는 줄은 없다.

출력

각 테스트 케이스에 대해 정답을 출력한다.

팰린드롬일 경우 "Yes"를 출력하고, 그렇지 않을 경우 "No"를 출력한다.

간단히 말해서 이 문제는 앞뒤로 읽었을때, 같은 글을 판단(대소문자 구분X, 공백은 무시)하는 문제이다.

 


문제접근

나는 이 문제의 접근을 어떻게 해야할까 고민을 했다. Python에서 기본으로 제공하는 내장함수를 이용해 입력으로 주어진 문자열을 모두 upper()를 이용해 대문자로 만들어주었다.(대소문자 구분X) 그리고 reverse()를 통해 역순으로 된 또 다른 문자열객체를 만들어서 0번인덱스 부터 차례로 같은지를 탐색하도록 설계했다.

 


코드

아래는 코드이다.

"""
백준 알고리즘 10174번: 팰린드롬
https://www.acmicpc.net/problem/10174
"""
import sys

def calc():
    # txt1에 단어를 입력
    txt1 = list(sys.stdin.readline()[:-1])

    # txt1의 요소들 중에서 문자(isalpha)인 것을 모두 대문자(upper)로 변경
    for i in range(len(txt1)):
        if txt1[i].isalpha() == True:
            txt1[i] = txt1[i].upper()

    # txt1의 역순으로 저장된 txt2를 생성
    txt2 = list(txt1)
    txt2.reverse()

    # txt1과 txt2를 순차적으로 비교하고
    # 서로 다른 요소일때 바로 "No"를 리턴
    result = "No"
    for i in range(len(txt1)):
        if(txt1[i] == txt2[i]):
            result = "Yes"
        else:
            result = "No"
            break;
    return result

def main():
    n = sys.stdin.readline()
    n = int(n)
    for i in range(n): print(calc())

if __name__ == '__main__':
    main()

그냥 위에서 설계한 내용 그대로 구현하였다.

문자열과 관련된 문제는 아무래도 Python이 편한거 같다.

728x90