파이썬 알고리즘 011 | 회문 문자열 검사

Yunny.Log ·2021년 1월 7일
0

Algorithm

목록 보기
11/318
post-thumbnail

11.회문 문자열 검사

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

<내 풀이>

n=int(input())
for i in range(n) :
    a=(input())
    a=a.upper()
    if a==(a[::-1]):
        print('#{} YES'.format(i+1))
    else : 
        print('#{} NO'.format(i+1))        

<풀이>

n=int(input())
for i in range(n):
	s=input()   
    s=s.upper()
    size=len(s)
    for j in range(size//2):
    	if s[j]==s[-1-j]:
        	print('#{} YES'.format(i+1))
        	break
    	else :
            print('#{} NO'.format(i+1))
  • 인덱스 성질을 사용해서 문제를 푸심, 이렇게 직접 구현하는 것이 코딩테스트나 면접에서는 더 유리하다고 말슴하신다

<반성점>

<배운 점>

  • [::-1] string에서 배열을 거꾸로 하는 것

  • 이 회문열 검사 문제에서는 대소문자구분하지 않는다는 조건 있으면 대문자, 소문자를 통일해야 하므로 문자열 입력받고 upper() / lower() 해주어야 한다

  • 회문을 탐색할 때는 글자 길이가 홀수/짝수인 것은 관계 없다. 그냥 길이//2 한 것을 범위로 놓고 반복문을 실행하면 된다.

  • 뒤에서부터 탐색할 때는 list[-1-i]를 해주면 손쉽게 탐색할 수 있다.

  • 리스트 원소를 한번에 뒤집어 주려면 list[::-1]

  • 회문문자열:
    for j in range(size//2):
    if s[j]==s[-1-j]:

0개의 댓글