N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는
프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력
한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하여 프로그래밍 한다.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 100,000를 넘지 않는다.
▣ 출력설명
첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.
▣ 입력예제 1
5 3
2 55 62 3700 250
▣ 출력예제 1
23 73
def reverse(x) :
x=str(x)
x=x[::-1]
return(int(x))
def IsPrime(x) :
cnt=0
for i in range(2,x):
if x%i==0:
cnt+=1
if cnt == 0:
return(True)
n=int(input())
a=list(map(int,input().split()))
for i in a:
o=reverse(i)
if IsPrime(o) :
print(o, end=' ')
==> 내 풀이의 치명적인 실수: 1은 소수에 포함이 안되니 IsPrime함수에서 받을 때 if x==1 : return False 했어야한다
내 풀이로 가면 100 넣었을 때 1 되는데도 True로 작용
==><수정한 풀이>
def IsPrime(x) :
cnt=0
if x!=1 :
for i in range(2,x):
if x%i==0:
cnt+=1
if cnt == 0:
return(True)
else :
return(False)
x=x//10
t=x%10
res=0
res=res*10 + t
(ex) x=9010 이라고 치면
res=0*10 + 0 =0
res=0*10 + 1 =1
res=1*10 + 0=10
res=10*10+ 9=109
=>이와 같이 맨마지막에 역순으로 출력아 된다
def reverse(x):
res=0
while x>0 :
t=x%10
res=res*10 + t
x=x//10
return res
def IsPrime(x) :
if x==1 :
return False
for i in range(2,x) :
if x%i==0:
return False
else :
return True
n=int(input())
a=list(map(int, input().split())))
for x in a
tmp=reverse(x)
s=s[::-1]
: string에서 reverse 하는 것
replace(): 리스트, 문자열 등에서 같은 문자, 숫자를 한꺼번에 바꿀 때 뿐만아니라 지울 때도 사용할 수 있다. ''(공백)으로 바꿔주자
숫자를 뒤집는 간단한 방법:
def reverse(x):
res=0
while x>0:
t=x%10
res=res*10+t
x=x//10
return res
==>값을 10으로 나눈 나머지를 저장 -> 0으로 초기화 한 res에 res*10 + 나머지를 더해줌 -> 값을 10으로 나눈 몫으로 초기화 -> 값이 0이 될 때까지 반복(x>0)
def isPrime(x):
if x==1:
return False
for i in range(2, x//2 + 1):
if x%i==0:
return False
return True
부끄럽지만 여기서 알게 된 사실인데, range()는 start 값과 end 값이 같으면 빈 객체를 리턴한다. 그러므로 2도 소수로 나오게 된다.