*본 문제는 인프런 김태원 강사님의 파이썬 알고리즘 문제풀이 강의에 기반합니다.
문제 뒤집은 소수
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910을 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
뒤집는 함수인 def reverse(x)와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하여 프로그래밍 한다.
-입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 100,000를 넘징 않느다.
-출력설명
첫 줄에 뒤집은 소수를 출력한다. 출력순서는 입력된 순서대로 출력합니다.
-입력예제1
5
32 55 62 3700 250
-출력예제1
23 73
풀이
> def reverse(x):
선택1. str 으로 하는게 제일 쉬울 듯
선택2. 내가 할 수 있는 방법은 이것을 while x>0: x를 10으로 나눠 나머지를 저장, 몫은 다시 어디에 저장 그리고 그것을 곱해준다.
t는 나머지 저장
x는 몫을 저장
t=x%10 나머지를 저장
x=x//10 몫을 저장
res=0(뒤집은 숫자),
res= res*10+t
예) '9010' 함수의 결과는 109
9010%10=0 (나머지 t는 0), 901 (몫 x는 901) -> 0*10+0=0 (res는 0)
901%10=1 (t는 1), 90(몫 x는 90) -> 0*10+1=1(res는 1)
90%10=0 (t는 0), 9(몫 x는 9) -> 1*10+0=10 (res는 10)
9%10=9(나머지t는 9), 0(몫 x는 0) -> 10*10+9=109 (res는 109)
>def isPrime(x)
만약 100이 들어오면 1이 반환되는데 예외 부분 처리 (if x==1: return False(함수 종료 시키기))
for i in range(2,n): i%n==0 나머지가 0이면 False else return True
>출력
리스화시켜서 저장하고
for x in a: reverse 하고 그 다음 isPrime을 부른다.
if isPrime(tmp): print(tmp)
import sys
sys.stdin=open("input.txt", "rt")
def reverse(x):
res=0
while x>0:
t=0
t=x%10
x=x//10
res=res*10+t
return res
'''
1이 넘어오면 그냥 falese 반환 종료 , 그리고 for else 구문 에서 for 문이 정상적으로
다 돌았으면 else : return True
'''
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) ##reverse 함수 호출
if isPrime(tmp):
print(tmp, end=' ')
'알고리즘? > 기본2' 카테고리의 다른 글
9. 주사위 게임 (map) (0) | 2023.05.08 |
---|---|
10. 점수계산 (0) | 2023.05.06 |
6. 자릿수의 합 (0) | 2023.05.05 |
5. 정다면체 (0) | 2023.05.05 |
4. 대표값 eumerate() (1) | 2023.05.04 |