Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 회문 문자열 검사

yaebb_82 2023. 4. 25.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

 

문제

N개의 문자열 데이터를 입력받아 앞에서 읽을 대나 뒤에서 읽을 때나 같은 경우(회문 문자열)이면 YES를 출력하고 회문 문자열이 아니면 NO를 출력하는 프로그램을 작성한다. 단, 회문을 검사할 때 대소문자를 구분하지 않습니다.

 

 

 

풀이

• 내 풀이

import sys
input = sys.stdin.readline

N = int(input())

for i in range(N):
    data = input().rstrip().lower()
    idx = len(data)-1
    count = 0
    
    for j in range(len(data)//2):
        if data[j] == data[idx]:
            count += 1
            idx -= 1
        else:
            print(f'#{i+1} NO')
            break

    if count == len(data)//2:
        print(f'#{i+1} YES')

• 답안 : Python (1)

import sys
input = sys.stdin.readline

N = int(input())

for i in range(N):
    data = input().rstrip().upper()
    idx = len(data)
    
    for j in range(idx//2):
        if data[j] != data[-1-j]:
            print(f'#{i+1} NO')
            break
    else:
        print(f'#{i+1} YES')

• 답안 : Python (2) - 더 짧은 코드

import sys
input = sys.stdin.readline

N = int(input())

for i in range(N):
    data = input().rstrip().upper()

    # data[::-1] -> reverse 된 문자열
    if data == data[::-1]:
        print(f'#{i+1} YES')
    else:
        print(f'#{i+1} NO')

- 소문자(lower)와 대문자(upper) 선택은 상관없이 하나 선택해서 사용하면 될 것 같다.

- 문자열 인덱스를 맨 뒤에서 부터 접근하는 방법을 나는 (총길이-1)에서 1씩 줄어드는 방법을 선택했고, 답안에서는 인덱스를 -1로 해서 접근하는 방법을 선택했다. 인덱스 -1로 접근하는 것이 훨씬 코드량도 적고 쉬운 방법인 것 같은데 생각을 못했던 것 같다.

- 더 쉬운 방법으로, 기존 문자열과 뒤집은(reverse = [ : :-1])문자열을 비교하는 방법이 있다는 것도 알게 되었다.

- 문자열 출력은 나는 f-string이 더 편해서 해당 방법을 사용해서 출력하였다.

 

 

 

반응형

댓글