회문 문자열 검사
📄 문제
N개의 문자열 데이터를 입력받아 앞에서 읽을 때나 뒤에서 읽을 때나 같은 경우(회문 문자열) 이면
YES를 출력하고 회문 문자열이 아니면 NO를 출력하는 프로그램을 작성한다.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
▣ 입력설명
첫 줄에 정수 N(1<=N<=20)이 주어지고,
그 다음 줄부터 N개의 단어가 입력된다.
각 단어의 길이는 100을 넘지 않는다.
▣ 출력설명
각 줄에 해당 문자열의 결과를 YES 또는 NO로 출력한다.
▣ 입력예제
5
level
moon
abcba
soon
gooG
▣ 출력예제
#1 YES
#2 NO
#3 YES
#4 NO
#5 YES
🧞 풀이
풀이
# 입력 : 첫째 줄 - 단어 갯수 n
# 입력 : 둘째 줄부터 n개의 단어
# 출력 : 회문문자열이면 YES, 아니면 NO
n = int(input()) # 정수 n 입력 및 할당
for j in range(n): # n만큼 반복
w = input().lower() # 입력 받은 값 lower()로 모두 소문자로 바꿈
w = list(w) # 입력 받은 문자열 리스트로 변환
cnt = 0 # 개수 세기 위한 cnt 할당
if len(w) % 2 == 0: # 만약 입력한 문자 길이가 짝수면
for i in range(int(len(w)/2)): # w 길이의 절반만큼 반복
if w[i] == w[len(w)-1-i]: # 만약 앞 글자와 끝 글자가 같다면
cnt += 1 # 갯수 1개 추가
else: # 만약 입력한 문자 길이가 홀수면
for i in range(int(len(w)/2-0.5)): # w 길이 - 0.5만큼 반복
if w[i] == w[len(w)-1-i]: # 만약 앞 글자와 끝 글자가 같다면
cnt += 1 # 갯수 1개 추가
if len(w) % 2 == 0: # 만약 짝수면
if cnt == len(w) / 2: # cnt가 문자 길이 절반과 같다면
print(f'#{j+1} YES') # YES 출력
else: # 아니면
print(f'#{j+1} NO') # NO 출력
else: # 만약 홀수면
if cnt == len(w) / 2 - 0.5: # cnt가 문자 길이 절반 - 0.5와 같다면
print(f'#{j+1} YES') # YES 출력
else: # 아니면
print(f'#{j+1} NO') # NO 출력
다른 사람 풀이 (1)
# 회문문자열
# s[j] == s[-1-j] 로 접근할 수 있음
n = int(input())
for i in range(n):
s = input()
s = s.upper() # 문자를 대문자화
size = len(s) # 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))
다른 사람 풀이 (2)
# 회문문자열 짧은 풀이
n = int(input())
for i in range(n):
s = input()
s = s.upper()
if s == s[::-1]:
print('#%d YES' % (i + 1))
else:
print('#%d NO' % (i + 1))
'🧩 Algorithm > 🟨 Python' 카테고리의 다른 글
[파이썬 알고리즘] 카드 역배치(정올 기출) (0) | 2022.07.24 |
---|---|
[파이썬 알고리즘] 숫자만 추출 (0) | 2022.07.24 |
[파이썬 알고리즘] 점수계산 (0) | 2022.07.24 |
[파이썬 알고리즘] 주사위 게임 (0) | 2022.07.24 |
[파이썬 알고리즘] 뒤집은 소수 (0) | 2022.07.24 |