회문 문자열 검사

도로롱·2023년 4월 13일

회문 문자열

level
goog
diid

처럼 앞으로 읽을때나 뒤로 읽을때나 모두 같은 경우를 회문 문자열이라고 한다
n개의 문자열 데이터를 입력받아 회문 문자열이면 YES 아니면 NO를 출력하는 함수를 작성하시오

놓친 부분

import math


n= 'abba'
# 기준 인덱스 설정
st_idx = math.floor(len(n)/2) # 홀수, 짝수인 경우 모두 동일

# 굳이 math 쓸 필요없고 몫만 구하면 됨

str_idx = len(n)//2

arr_fr= []
arr_bk = []
for i in range(0,st_idx):
    arr_fr.append((n[i]).upper())
for i in range(st_idx,len(n)):
    arr_bk.append(n[i].upper())

arr_bk.reverse() # 거꾸로 정렬


print(arr_fr)
print(arr_bk)

if arr_fr == arr_bk:
    print('YES')
else:
    print('NO')

처음 이 문제를 풀을때, 인덱스를 두개로 쪼개서 기준이 되는 인덱스의 절반을 모은 리스트, 나머지 절반을 모은 리스트를 비교하여 맞으면 YES 라고 출력되게 만들었다.
더불어 MATH 함수까지 IMPORT 했는데 전혀 그럴 필요가 없다. 기준이 되는 인덱스는 몫만 구하면 될일이고, 인덱스를 활용하면 두개로 쪼갤 필요도 없다

이렇게 풀어야 한다

  • 기준 인덱스는 몫만 구하는 // 연산자를 활용한다
  • 리스트의 마지막 원소의 인덱스는 -1임을 활용한다
  • FOR ELSE 구문에 break를 활용하여 코드의 중첩을 막는다
n= 'abCBa'
n = n.upper() # 모두 대문자로 변경시켜 대소문자 구별없이 만들기

# 기준 인덱스
str_idx = len(n)//2


for i in range(str_idx):
    if n[i] != n[-1-i]:
        print('NO')
        break
else:
    print('YES')
profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글