N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하여 프로그래밍 한다.
<내 답안>
def reverse(x):
res = 0
while x>0:
t = x%10
res = res*10+t
x = x//10
return res
def isPrime(x):
cnt = 0
for i in range(1, x+1):
if x % i == 0:
cnt += 1
if cnt == 2:
return True
else:
return False
n = int(input())
list1 = list(map(int, input().split()))
for i in list1:
a = reverse(i)
if isPrime(a) == True:
print(a, end=' ')
reverse 함수가 관건이였다.
<자릿수의 합> 문제랑 같은 유형이였는데..
자릿수를 분리해야 하나 생각은 했지만 아무래도 문자열로 바꿔서 뒤집은 다음 다시 정수형으로 바꾸는 방식인 것 같아서 그렇게만 계속 풀었다.
자릿수를 이용하는 방식이였을 줄이야.. 게다가 자릿수를 이용해서 뒤집는 방법이 좀 신선하다. 이렇게도 풀 수 있구나 깨닫게 된 문제이다.
아, 그리고 isPrime에서 나는 소수를 구할 때 '소수 = 약수는 1과 내 자신(약수 2개)' 로 생각하고 풀었는데, 해설에서는 for-else를 이용하여 풀었다.
아직 내가 for-else에 익숙하지 않아서 그런지 이 구문을 사용하여 푸는 것이 좀 어색하다.
# ** 모범답안 참고 **
# 문자열은 불변
## 뒤집은 소수
def reverse(x):
res = 0
while x>0:
t = x%10
res = res*10+t
x = x//10
return res
def isPrime(x):
cnt = 0
if x == 1:
return False
'''해설
for i in range(2, x//2+1):
if x%i == 0:
return False
else: # 나눠지는 i가 없으면 = if문 들어가지 않고 for문이 정상종료 되면
return True
'''
'''내가 푼 부분
for i in range(1, x+1):
if x % i == 0:
cnt += 1
'''
if cnt == 2:
return True
else:
return False
n = int(input())
list1 = list(map(int, input().split()))
for i in list1:
a = reverse(i)
if isPrime(a) == True:
print(a, end=' ')