회문 문자열 검사
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
본인풀이
1) 최초본인풀이
import sys
sys.stdin=open("input.txt", "r")
N = int(input())
answer = [input() for _ in range(N)] #여러줄로 입력을 받아서 리스트 안에 넣기
cnt=0
for x in answer: #answer리스트의 "문자열 요소"에 접근한다.
a =""
cnt =cnt+1
x = x.lower()
for i in x: #문자열 요소x를 i가 인덱스 별로 접근한다.
a = i + a
if a == x :
print("#%d YES" %cnt)
else:
print("#%d NO" %cnt)
2)리펙토링
import sys
sys.stdin=open("input.txt", "r")
N = int(input())
for i in range(N): #문자열 요소x를 i가 인덱스 별로 접근한다.
a =""
x = input() #for문을 돌면서 "문자열을 받는다."
x = x.lower()
for j in x: #문자열 뒤집기 for문
a = j + a
if a == x :
print("#%d YES" %(i+1))
else:
print("#%d NO" %(i+1))
강사풀이
1) 문자열 짝지어서 비교하기
import sys
sys.stdin=open("input.txt", "r")
N = int(input())
for i in range(N): #N개의 문자열을 입력받는다..
s = input()
s = s.lower() #문자열 s를 소문자로 바꾼다.
size=len(s)
for j in range(size//2): #문자열 요소s의 처음과 끝을 비교, 두번째와 뒤에서 두번째를 비교한다....
if s[j] != s[-1-j]:
print("#%d NO" %(i+1))
break
else: #for문이 break를 만나지 않고 정상적으로 종료된 경우
print("#%d YES" %(i+1))
2) 문자열 == reverse문자열 비교
import sys
sys.stdin=open("input.txt", "r")
N = int(input())
for i in range(N): #N개의 문자열을 입력받는다..
s = input()
s = s.lower() #문자열 s를 소문자로 바꾼다.
if s ==s[::-1]: #문자열을 reverse하여 비교한다.
print("#%d YES" %(i+1))
else:
print("#%d NO" %(i+1))
'파이썬 알고리즘 > 파이썬 탐색 & 시물레이션' 카테고리의 다른 글
9. 봉우리 (0) | 2022.11.02 |
---|---|
8. 모래시계 (0) | 2022.11.02 |
7. 사과나무 (0) | 2022.11.02 |
6. 격자판 최대합 (0) | 2022.11.02 |
3. 카드역배치 (0) | 2022.11.01 |