본문 바로가기

백앤드 개발/코딩테스트

[파이썬 문제 풀이] 소수뒤집기

1. 문제

# n 개의 자연수 입력되면 각 자연수 뒤집고 그 수가 소수이면 그 수를 출력하라
# 첫 자리부터 연속된 0은 무시

 

2. 풀이

# 방법1
import sys
# sys.stdin=open("input.txt", "r")

num_count = int(input())
numbers = list(map(int, input().split()))
rev_num = [] # 뒤집어진 숫자 리스트

# 자릿수 뒤집는 함수
def reverse(x):
    result = 0

    # 끝자리 0인 경우 나누기 10 처리
    while x%10 == 0:
        x = x/10

    x = int(x)
    z_len = len(str(x))

    for i in range(1,z_len+1):
        result *= 10
        result += x%10
        x = int(x/10)

    return result

# 소수인지 확인하는 함수
def isPrime(x):

    if x == 1:
        return False
    
    is_s = True # 소수인가
    for s in range(2,int(x**(1/2))+1):
        if x%s==0:
            is_s = False
            break
    return is_s
        
# 자릿수 뒤집어서 rev_num 에 넣기        
for k in range(0, num_count):
    rev_num.append(reverse(numbers[k]))

# rev_num 중 소수인것만 출력
for i in rev_num:
    if isPrime(i) == True:
        print(i, end=' ')

 

# 방법2
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=' ')

3. 배운 내용

1) // : 파이썬에서 몫을 구하는 연산자

2) 소수 구할 때 1은 제외시키기

3) list.reverse(): 리스트 순서 반전, 문자열튜플딕셔너리는 못뒤집음

 

참조: https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8