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
>> if문으로 반절 쪼개서 반절기준 오른쪽 왼쪽 비교
>> for else문을 이용해서 한번이라도 틀린게 나왔을 경우 else문으로 들어감
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import sys
sys.stdin=open("input.txt", "r")
n = int(input())
arr = []
result = ''
discordNum = 0
for i in range(n): #배열에 들어있는 개수만큼 반복문
str = input()
str = str.lower() #문자열 소문자로 변환
size = len(str) #문자열 길이 체크
for j in range(size // 2): #전체 문자열 중 반절길이만큼 반복문
if str[j] != str[(j+1)*-1]: #반절 기준 왼쪽 문자랑, 오른쪽 문자랑 하나씩 비교[-1-j도 가능]
print('#%d NO' %(i+1)) #한개라도 다른게 있으면 break
break
else: #반절 기준 왼쪽 문자랑, 오른쪽 문자랑 동일하면 출력
print('#%d YES' %(i+1))
|
cs |
풀이 2
>> str[::-1]하면 문자열 거꾸로 출력 가능
>> str 똑바로 문자와, str[::-1] 거꾸로 문자를 비교해서 틀린경우를 찾는다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import sys
sys.stdin=open("input.txt", "r")
n = int(input())
arr = []
result = ''
discordNum = 0
for i in range(n): #배열에 들어있는 개수만큼 반복문
str = input()
str = str.lower() #문자열 소문자로 변환
if str == str[::-1]: #(s가 거꾸로된 문자열됨,슬라이스 기능)맨뒤에서부터 문자열을 1씩 줄여서 문자열을 거꾸로 바꿈
print('#%d YES' %(i+1))
else:
print('#%d NO' %(i+1))
|
cs |
'코테풀이 > 인프런 파이썬 알고리즘' 카테고리의 다른 글
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_4_두 리스트 합치기 (0) | 2021.08.02 |
---|---|
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_3_카드 역배치 (0) | 2021.08.01 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_2_숫자만 추출 (0) | 2021.07.29 |
코드 구현력 기르기_10_점수계산 (0) | 2021.07.28 |
코드 구현력 기르기_9_주사위 게임 (0) | 2021.07.27 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_1_회문 문자열 검사