본문 바로가기
이론/Python

mail_programming - 4주차 : 팰린드롬 판정하기

by 유세지 2018. 4. 15.



이번 매일 프로그래밍은 주어진 정수가 팰린드롬인지 아닌지 판정하는 것이다. 태어나서 팰린드롬이라는 말을 처음 들어보는 것 같은데 다행히도 뜻은 별로 어렵지 않다. 앞 뒤가 똑같은 수인지만 확인하면 되는 간단한 문제였다.


처음엔 배열(리스트)에 넣고 리버스를 하면 되는 것이 아닌가? 라고 생각을 했으나 문제의 조건에 정수를 문자열로 바꿔서는 안된다고 적혀있기에... 되도록 정수 상태 그대로를 보존해서 풀이해보았다.


슬라이스, 리버스 등을 사용할 수 없기에 한 자리씩 떼서 분류하기엔 역시 10으로 나눈 몫과 나머지를 이용하는게 가장 간단하다고 생각했다. 초기값이 0인 tmp 변수에 10을 곱하여 숫자가 들어갈 자리를 만들어주고, 주어진 수를 10으로 나눈 나머지를 tmp 변수에 더한 뒤 인자로 받은 정수를 10으로 나누는 과정을 0이 될때까지 반복했다.


이렇게 하면 주어진 숫자를 정확히 뒤집어낸 tmp를 얻어낼 수 있다. 이제 처음에 받았던 인자를 저장해놓은 org 변수와 비교해서 같으면 True를 반환하고, 다르다면 False를 반환하는 식이다.


다만 예외 사항이 하나 있기 때문에 예외처리를 해주었다.



예외 : 팰린드롬은 음수가 아니다.

앞에 마이너스가 붙은 정수는 어떤 값을 가져도 팰린드롬이 될 수 없다. 이는 문제에 주어진 두 번째 예시에서 알 수 있는데, 절댓값이 팰린드롬인 101임에도 불구하고 Output은 False라고 나와있다. 따라서 입력된 정수가 0보다 작은 수라면 팰린드롬이 될 수 없으므로 False를 반환하게 된다.


아래는 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def palindrome(integ):
    if integ < 0return False
    else:
        tmp = 0
        org = integ
        while(integ > 0):
            tmp *= 10
            tmp += integ % 10
            integ = int(integ/10)
        if tmp == org: return True
        elsereturn False
 
integer = int(input('정수를 입력하세요 : '))
if(palindrome(integer) == True):
    print("True")
else:
    print("False")
cs



아래는 결과창이다.



반응형

댓글