본문 바로가기
알고리즘?/기본3 탐색&시뮬레이션(string, 1차원 2차원 리스트 탐색)

1. 회문 문자열 검사 (문자열 뒤집기)

by 몰라닉네임 2023. 5. 8.

*파이썬 인덱스

 예) 크기가 5인 리스트

a[0] a[1] a[2] a[3] a[4]
a[-5] a[-4] a[-3] a[-2] a[-1]

 

 print(s[-1])

각 단어의 인덱스 s[-1]을 출력한것


*문자열 슬라이싱으로 뒤집기 

 문자열[시작:끝]  문자열을 앞에서부터 하나씩 슬라이싱 해서 새로운 문자열을 만든다. 

 문자열[시작:끝:규칙] 규칙은 슬라이싱을 하는 규칙입니다. 1이 디폴트값이며, 1이 들어가게 되면 문자열을 앞에서부터 하나씩 잘라서 새로운 문자열을 만드는 것이다.

-1 을 넣어 뒤에서부터 잘라서 문자열을 뒤집을 수 있다. 

print(s[::-1])
import sys
sys.stdin=open("input.txt", "r")

n=int(input())

for i in range (0,n):
    # 문자열이 s에 들어온것
    s=input()
    s=s.upper()
    #제일 뒷자리부터 한단계씩 작아지면서 문자를 바꿔라
    print(s[::-1])

 두번째 네번째 단어에서 뒤집힌 것을 확인할 수 있다. 


*본 문제는 인프런 김태원 강사님의 파이썬 알고리즘 문제풀이 강의에 기반합니다.  

 

문제 점수계산

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

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

 

-입력설명 

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

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

 

-출력설명 

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

 

-입력예제1

5

level 

moon

abcba

soon

gooG

 

-출력예제1

#1 YES

#2 NO

#3 YES

#4 NO

#5 YES

 

풀이

 

(구현)

import sys
sys.stdin=open("input.txt", "r")

n=int(input())

for i in range (0,n):
    # 문자열이 s에 들어온것
    s=input()
    s=s.upper()
    size=len(s)
    # 문자열 대문자화로 통일하기 구별하지 않는다. 했으니
    for j in range(size//2):
        # 회문이 아닌것
        if s[j]!=s[-1-j]:
            print("#%d NO" %(i+1))
            break
    else:
        # 회문이 아닌것
        print("#%d YES" %(i+1))

출력결과

파이썬스러운? 코드

import sys
sys.stdin=open("input.txt", "r")

n=int(input())

for i in range (0,n):
    # 문자열이 s에 들어온것
    s=input()
    s=s.upper()
    if s==s[::-1]:
        #회문인지
        print("#%d YES" %(i+1))
    else:
        print("#%d NO" %(i+1))