본문 바로가기
알고리즘?/기본2

8. 뒤집은 소수

by 몰라닉네임 2023. 5. 6.

*본 문제는 인프런 김태원 강사님의 파이썬 알고리즘 문제풀이 강의에 기반합니다.  

 

문제 뒤집은 소수

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910을 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.

뒤집는 함수인 def reverse(x)와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하여 프로그래밍 한다. 

 

-입력설명

첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 

각 자연수의 크기는 100,000를 넘징 않느다. 

-출력설명 

첫 줄에 뒤집은 소수를 출력한다. 출력순서는 입력된 순서대로 출력합니다. 

 

-입력예제1

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