티스토리 뷰

반응형

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로 하면 된다.

 

훨씬 간단하고 파이썬에서는 합당한 방법이다.

 

 

반응형