앞뒤가 같아서 거꾸로 읽어도 같은 수를 '대칭수'라고 한다. 예를들어 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 |