[문제]
뒤집은 소수
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
[풀이]
import sys
n = int(input())
number = list(map(int, input().split()))
# 뒤집는 함수
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
return True
for x in number:
tmp = reverse(x)
if isPrime(tmp):
print(tmp, end=' ')
[중요내용]
1. 숫자 뒤집기: 주어진 숫자를 문자열로 변환해서 reverse 시켰음. 그런데 'invalid literal for int() with base 10' 오류 발생.
=> 값을 10으로 나눈 나머지를 저장 -> 0으로 초기화 한 res에 10을 곱해주고 나머지를 더해줌 -> 값을 10으로 나눈 몫으로 초기화 -> 값이 0이 될 때까지 반복
2. 소수 찾기: 어떤 수가 소수인지 판별할때는 그 수의 1/2 까지(홀수라면 몫+1 까지)만 조사하면 된다. 여기서 자신 이외의 약수는 자신의 절반이 최대임. => 절반까지만 나누어 봐도 그 수가 소수인지 판별 가능.
ex) 36을 약수들의 곱으로 나타내면 1*36, 2*18, 3*12 ... 로 나타낼 수 있다.
'Coding Test > Python' 카테고리의 다른 글
| [Python] 점수계산 (0) | 2023.01.23 |
|---|---|
| [Python] 주사위게임 (0) | 2023.01.23 |
| [Python] 소수(에라토스테네스 체) (1) | 2023.01.17 |
| [Python] 대표값 (0) | 2023.01.11 |
| [Python] K번째 큰 수 (0) | 2023.01.11 |