코딩테스트[파이썬]/알고리즘 문제풀이 입문

[구현력 키우기] - 뒤집은 소수

softmoca__ 2024. 2. 5. 12:43
목차

 

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):
    res=0
    while x>0:
            if x%10==0:
                x=x//10
            else:
                res=res*10+x%10
                x=x//10
    return res

def isPrime(x):
     for i in range(2,x):
          if x%i==0:
               return False
     return True
               
n=int(input())

arr=list(map(int,input().split()))

for i in range(n):
    x=reverse(arr[i])
    if isPrime(x):
         print(x,end=' ')

reverse함수를 구현하는데 시간이 쬐끔 소요 되었다.

res=res*10 +x%10이라는 식을 사용하여 숫자를 뒤집었다.

 

import sys
sys.stdin=open("input.txt", "r")
n=int(input())
a=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 a:
    tmp=reverse(x)
    if isPrime(tmp):
        print(tmp, end=' ')

나의 코드와 거의 비슷하지만 reverse함수에서 입력 받은 숫자의 뒷부분이 0 이라는것과 상관없이 나의 코드의 else 부분으로만 작성되어있다.

생각해보니 굳이 분기 처리를 하지 않았어도 되었다...!