[Python-CodingTest] 2-8. 뒤집은 소수
뒤집은 소수
문제 정리
입력
5 // n
32 55 62 3700 250 // n개의 자연수
처리 과정
reverse(x) 작성
- x가 인자로 들어왔을 때 x의 일의 자리(t)를 떼어내기
- 그 일의 자리(t)를 이용한 reverse()의 핵심코드가
res = res*10+t
- 일의 자리를 떼어낸 x로 업데이트
isPrime(x) 작성
- 100이 reverse되어 1이 isPrime()의 인자로 넘어올 수도 있으니 x가 1일 경우 False 리턴
- for문을 이용해 x가 i로 나누어떨어진다면 False 리턴
- x의 약수는 1과 자기자신(x)빼고는 (x//2)+1을 넘지 않으니 for문의 range는
range(2,(x//2)+1)
- for-else를 이용해 for문에서 리턴되지 않으면 else에서 True 리턴
출력
8
내 답
import sys
sys.stdin = open("./input/in8.txt", "rt")
n = int(input())
lst = list(map(int, input().split()))
def reverse(x):
# 숫자를 각 자리수의 정수 리스트로 변환
x_lst = list(map(int, str(x)))
# x_lst.reverse() # 이거 하면 반대로 나옴!
result=0
for i,val in enumerate(x_lst):
result += val * (10**i) # 10의 i승
return result
def isPrime(x):
ch = [0]*(x+3)
for i in range(2,x+1):
if ch[i]==0:
# ch[i]는 소수이다.
for j in range(i+i,x+1,i):
ch[j]=1
if ch[x]==0:
return True # 0이면 소수
return False # 1이면 소수 아님
## 아래와 같은 코드
# for i in range(n):
# if isPrime(reverse(lst[i]))==True:
# print(reverse(lst[i]), end=' ')
for x in lst:
if isPrime(reverse(x))==True:
print(reverse(x), end=' ')
풀이
import sys
sys.stdin = open("./input/in8.txt", "rt")
n = int(input())
lst = 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):
# 100이 reverse되어 1이 isPrime()의 인자로 넘어올 수도 있는 상황
if x==1:
return False
for i in range(2,(x//2)+1): # x의 약수는 1과 자기자신(x)빼고는 (x//2)+1을 넘지 않는다
if x%i==0:
return False
else:
return True # for문에서 False를 리턴하지 않으면 소수(True)인 것
for x in lst:
tmp = reverse(x)
if isPrime(tmp):
print(tmp, end=' ')
정리
reverse()
와isPrime()
의 논리 이해하기- 어떤 수(x)의 약수는 자기 자신(x)을 제외하고는
(x//2)+1
을 넘지 않는다이유? 예를들어 어떤수가 20이라고 한다면,
20의 약수는 (1,20), (2,10), … 이기 때문에 10(=20//2 + 1)
을 넘지 않는 것이다
💛 개인 공부 기록용 블로그입니다. 👻