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

 

▣ 입력설명

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

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

 

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

 

▣ 입력예제 1

5

level

moon

abcba

soon

gooG

 

▣ 출력예제

1

#1 YES

#2 NO

#3 YES

#4 NO

#5 YES

 

풀이 1

 >> if문으로 반절 쪼개서 반절기준 오른쪽 왼쪽 비교

 >> for else문을 이용해서 한번이라도 틀린게 나왔을 경우 else문으로 들어감

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
sys.stdin=open("input.txt""r")
= int(input())
arr = []
result = ''
discordNum = 0
 
for i in range(n):                          #배열에 들어있는 개수만큼 반복문
    str = input()
    str = str.lower()                       #문자열 소문자로 변환
    size = len(str)                         #문자열 길이 체크
    
    for j in range(size // 2):              #전체 문자열 중 반절길이만큼 반복문
        if str[j] != str[(j+1)*-1]:         #반절 기준 왼쪽 문자랑, 오른쪽 문자랑 하나씩 비교[-1-j도 가능]
            print('#%d NO' %(i+1))          #한개라도 다른게 있으면 break
            break
    else:                                   #반절 기준 왼쪽 문자랑, 오른쪽 문자랑 동일하면 출력
        print('#%d YES' %(i+1))
 
cs

 

풀이 2

 >> str[::-1]하면 문자열 거꾸로 출력 가능

 >> str 똑바로 문자와, str[::-1] 거꾸로 문자를 비교해서 틀린경우를 찾는다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
sys.stdin=open("input.txt""r")
= int(input())
arr = []
result = ''
discordNum = 0
 
for i in range(n):                          #배열에 들어있는 개수만큼 반복문
    str = input()
    str = str.lower()                       #문자열 소문자로 변환
    if str == str[::-1]:     #(s가 거꾸로된 문자열됨,슬라이스 기능)맨뒤에서부터 문자열을 1씩 줄여서 문자열을 거꾸로 바꿈
        print('#%d YES' %(i+1))
    else:
        print('#%d NO' %(i+1))
 
cs
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_1_회문 문자열 검사