[알고리즘] 회문 문자열 검사

(문제) 회문 문자열 검사


N개의 문자열 데이터를 입력받아 앞에서 읽을 때나 뒤에서 읽을 때나 같은 경우(회문 문자열)이면 YES를 출력하고 회문 문자열이 아니면 NO를 출력하는 프로그램을 작성한다.

단 회문을 검사할 때 대소문자를 구분하지 않습니다.

입력설명

첫 줄에 정수 N(1<=N<=20)이 주어지고, 그 다음 줄부터 N개의 단어가 입력된다.

각 단어의 길이는 100을 넘지 않는다.

출력설명

각 줄에 해당 문자열의 결과를 YES 또는 NO로 출력한다.

테스트케이스

입력예제 출력예제
5
level
moon
abcba
soon
gooG
#1 YES
#2 NO
#3 YES
#4 NO
#5 YES
7
stts
moon
abcba
yes
goodboy
stttttts
tttttttttttttt
#1 YES
#2 NO
#3 YES
#4 NO
#5 NO
#6 YES
#7 YES

해결방법

반복문을 입력으로 들어오는 문자열의 길이 반절만큼 하여 앞과 뒤의 문자를 비교하면서 확인한다.

이때, 대소문자는 구분하지 않는다.


코드 방법 1

n = int(input())

for i in range(n):
    # 대소문자 구분 안함
    word = input().lower()
    # 반절까지 비교
    for j in range(len(word)//2):
        # 맨 앞과 맨뒤에 비교
        # 만약 회문이 아니면 바로 끝
        if word[j] != word[len(word)-1-j]:
            print(f'#{i+1} NO')
            break
    # 반복문이 제대로 끝나면 출력
    else:
        print(f'#{i+1} YES')

코드 방법 2 (파이썬 nic 하게)

n = int(input())

# 슬라이싱 이용하기
for i in range(n):
    word = input().lower()
    if word == word[::-1]:
        print(f'#{i+1} YES')
    else:
        print(f'#{i+1} NO')

댓글남기기