ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 10174번: 팰린드롬
    코딩(Coding)/백준 문제풀이 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

    '코딩(Coding) > 백준 문제풀이' 카테고리의 다른 글

    [백준] 1920번: 수 찾기  (0) 2020.12.30
    [백준] 7785번: 회사에 있는 사람  (0) 2020.12.29
    [백준] 1037번: 약수  (0) 2020.12.28
    [백준] 17608번: 막대기  (0) 2020.12.24
    [백준] 8958번: OX퀴즈  (0) 2020.12.24

    댓글

Designed by black7375.