파이썬 알고리즘-11 (탐색)회문 문자열 검사

jiffydev·2020년 8월 24일
0

Algorithm

목록 보기
12/134
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())

lst=[]
num=0

for i in range(n):
    lst.append(input().lower())

for x in lst:
    cnt=0    
    for i in range(len(x)//2):
        if x[i]==x[-i-1]:
            cnt+=1
    if cnt==len(x)//2:
        num+=1
        print(f"#{num} YES")
    else:
        num+=1
        print(f"#{num} NO")

단어의 처음과 끝 문자를 계속 비교해 나가는 논리는 맞았지만, 코드를 조금 더 간결하게 쓰도록 노력해야 한다. 또 처음과 끝이 같지 않았을 때를 먼저 if문에 놓는 것이 전부 반복할 필요 없이 break할 수 있기 때문에 그 점도 생각해야 할 듯.

풀이

n=int(input())
for i in range(1, n+1):
    str=input()
    str=str.upper()
    for j in range(len(str)//2):
        if str[j]!=str[-1-j]:
            print("#%d NO" %i)
            break
    else:
        print("#%d YES" %i)

일반적인 풀이

n=int(input())
for i in range(n):
    str=input()
    str=str.upper()
    if str==str[::-1]:
        print("#%d YES" %i)
    else:
        print("#%d NO" %i)

파이썬 전용(?) 풀이. 하지만 실제 코딩테스트/면접에서는 직접 비교하라고 하는 경우도 있으므로 일반적인 풀이를 먼저 완벽히 이해하고, 파이썬에서 쓸 수 있는 풀이는 여유가 되면 기억하자.

반성점

  • 불필요한 코드가 많았다. 필요 없는 코드가 있지 않나 항상 의식할 것

배운 것

  • 회문을 탐색할 때는 글자 길이가 홀수/짝수인 것은 관계 없다. 그냥 길이//2 한 것을 범위로 놓고 반복문을 실행하면 된다.
  • 뒤에서부터 탐색할 때는 list[-1-i]를 해주면 손쉽게 탐색할 수 있다.
  • 지금 당장 쓸 일은 없겠지만, 리스트 원소를 한번에 뒤집어 주려면 list[::-1]
profile
잘 & 열심히 살고싶은 개발자

0개의 댓글