티스토리 뷰
반응형
https://www.acmicpc.net/problem/1259
1259번: 팰린드롬수
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
www.acmicpc.net
풀이
팰린드롬으로 판단하려면 간단하게 앞쪽의 수와 맨 뒤쪽의 수를 비교하면서 가면 된다.
코드로 직관적으로 쉽게 짜면 다음과 같다.
import sys
li = list(map(int,sys.stdin.buffer.read().rstrip().split()))
for i in li:
if i==0:
break
i=str(i)
a=0 #첫번째 수의 인덱스
b=-1 #마지막 수의 인덱스
while len(i)!=a:
if int(i)<10:
print('yes')
break
a1=i[a]
a2=i[b]
if a1!=a2: #첫번째 수와 마지막 수의 비교
print('no')
break
a+=1 #각각을 1씩 이동시킴
b-=1
if len(i)==a:
print('yes')
그런데 코드가 너무 길다. 게다가 10 이하의 수도 고려해줘야 한다.
어떻게 하면 코드를 줄일 수 있을까?
import sys
while 1:
li = sys.stdin.readline().rstrip()
if li=='0':
break
if li==li[::-1]:
print('yes')
else:
print('no')
간단하다. 리스트 자체를 반대로 뒤집는 방법을 쓰면 된다.
:: 명령어는 재배열 명령어로써, ::-1을 하면
띄어서 풀이하자면 :(전체)를 :-1(처음부터 -1까지 역순으로 뒤집는다) 가 될 것이다.
와닿지 않는다면 [5:0:-1] 이라 했을 때 5번째 인덱스부터 1번째까지 역순으로 만든다
0번째가 아닌 이유는 for를 생각해보면 쉬울 것이다.
0번째까지 하고 싶다면 5::-1로 하면 된다.
훨씬 간단하고 파이썬에서는 합당한 방법이다.
반응형