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
내 풀이
import sys
sys.stdin=open("input.txt", "rt")
n = int(input())
for i in range(n):
a = list(input().lower())
lenA = len(a) #리스트 길이
count =0
for j in range(lenA // 2 ):
if a[j] == a[lenA-1-j]:
continue
else:
count+=1
if count ==0:
print('#',i+1, ' YES')
else:
print('#',i+1, ' NO')
설명:
- 입력값 n의 크기 만큼 반복문을 돈다. 반복하면서 입력값 문자열 a를 소문자 형태로 바꾸고 리스트로 바꿔준다.
- lenA를 통해 리스트의 길이를 구해준다.
- 변수 count를 선언한다. 여기서 카운트란 앞 뒤 수가 다른 경우의 수를 말한다.
- 앞 뒤 숫자를 비교하기때문에 반복분은 리스트 길이의 절반, 즉 2로 나눈 몫 횟수로 돌려준다.
- 반복문을 돌며 j번째 인덱스 값과 리스트길이-1-j 의 인덱스 값을 비교해준다.
- 만약 앞, 뒤 값이 같으면 continue해서 다음 앞뒤를 비교해주고, 다르면 count에 1을 추가해준다.
- 결과적으로 count가 0이면 앞뒤가 모두 같으므로 YES를 0이 아니면 NO를 출력해준다.
다른 풀이
import sys
sys.stdin=open("input.txt", "rt")
n = int(input())
for i in range(n):
s = input().upper()
size = len(s)
for j in range(size//2):
if s[j] != s[-1-j]:
print('#%d NO' %(i+1))
break
print('#%d YES' %(i+1))
설명
- 전반적으로 내 풀이와 크게 다르진 않다.
- 다만 2중 for문을 돌때 인덱스 값 세팅을 다르게했다. ex) s[-1]: 뒤에서부터 첫번째 인덱스값
- 또 굳이 리스트로 만들지 않고 문자열의 인덱스 값으로 바로 비교를 했다. (코드수를 줄일 수 있어 더 경제적이다.)
'CodingTest > 기타' 카테고리의 다른 글
[Til] git 명령어 정리 (작성중) (0) | 2022.05.10 |
---|---|
[Python_코테공부] 주사위 게임 (0) | 2021.12.24 |
[Python_코테공부] 소수(에라토스테네스 체) (0) | 2021.12.20 |
[Python_코테공부] K번째 큰 수 (0) | 2021.12.05 |