본문 바로가기

Programming/Algorithm

[Python3] 대칭수찾기

앞뒤가 같아서 거꾸로 읽어도 같은 수를 '대칭수'라고 한다. 예를들어 12321 이나 111, 43211234같은 것들이다. 맨 앞에 0이 있다고 생각하는 경우는 제외한다. 예) 1210 (X)

10진수로 10이상 n미만 자연수들 중 10진수로나 2진수로나 8진수로나 대칭수인것을 찾아라

16진수부터 영어까지 끌어오기 때문에 대칭수찾기로는 살짝 무리가 있다고 생각해서 뺀듯 하다. 생각보다 쉬운데 2진수 변환과 8진수 변환 함수 또는 메서드를 알고 있어야 쉽게 풀 수 있다.

전수조사를 해도 좋지만 조금만 생각해보면 2진수에서 대칭이 될려면 맨 끝이 1이어야 하는데 이는 홀수임을 의미한다. 따라서 10진수로 11부터 홀수만 찾으면 된다.

def reverse(x):    #파이썬에 reverse()메서드가 있지만 배열만 취급하고 메서드이기 때문에 조금 길어진다. 따라서 함수로 만들었다.

    x=list(str(x))

    x.reverse()

    a="".join(x)

    return a


n=int(input())

result=[]


for i in range(11,n,2):

    if(str(i)==reverse(i)):

        binary=str(bin(i))[2:]


        if(binary==reverse(binary)):    #and로 하나에 우겨넣어도 되지만 가독성을 위해 분리해놨다.

            octal=str(oct(i))[2:]


            if(octal==reverse(octal)):

                result.append(i)


print(result)


많은줄 알았는데 거의 없었다. 백만까지 1개 존재했고 그 뒤는 여러분께 맡긴다.


'Programming > Algorithm' 카테고리의 다른 글

[Python3] 3 6 9 게임  (0) 2017.01.22
[Python3] BruteList  (0) 2017.01.04
[Python3] 푸쉬푸쉬  (0) 2016.12.25
[Python3] 변수 스왑  (0) 2016.12.11
[Python3] 올바른 괄호 판단하기1  (0) 2016.12.06