뒤집은 소수

이세진·2022년 4월 15일
0

코테준비

목록 보기
8/87

생성일: 2022년 1월 7일 오후 6:04

구현 코드

# 뒤집은 소수
import sys
sys.stdin = open("input.txt", "rt")
n = int(input())
numList = list(map(int, input().split()))

def reverse(x):
    isFirst = True
    result = ""
    reverseNumList = list(str(x))
    reverseNumList.reverse()
    for i in reverseNumList:
        if isFirst and i == '0':
            pass
        elif isFirst and i != '0':
            result += i
            isFirst = False
        else:
            result += i
    return int(result)

def isPrime(x):
    if x == 1:
        return False
    if x == 2:
        return True
    m = int(x ** 0.5)
    for i in range(2, m+1):
        if x % i == 0:
            return False
    return True

for i in numList:
    reverseNum = reverse(i)
    if isPrime(reverseNum):
        print(reverseNum, end=' ')

모범 답안

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(x)에서 나는 정수 x를 스트링으로 바꾼 후 리스트로 만들어서 파이썬에서 제공하는 어레이 함수 중 하나인 reverse()를 이용하여 수를 뒤집었다.
  • 7300 과 같은 수를 뒤집으면 0073이 되어서 올바른 정수형이 되지 않는다. (올바른 경우는 73처럼 앞에 0이 없어야 함) 이를 해결하기 위해 리스트를 반복문으로 돌면서 첫번째로 0이 아닌 수가 나올 때까지는 결과값(뒤집은 수)에 추가하지 않는 식으로 구현하였다.
  • 모범 답안에서는 이전에 정수의 자릿수의 합을 구할 때와 마찬가지로 주어진 수를 10으로 나눈 나머지를 구하고 결과값에 더해가는 식으로 로직이 구성되어 있었다. 이런 식으로 구현하면 7300과 같은 수도 0073이 되지 않는다.
  • why?
    • res = res * 10 + t 에서 res와 t가 0 인 상태이기 때문에 끝의 0들은 결과값에 영향을 주지 않기 때문이다.
profile
나중은 결코 오지 않는다.

0개의 댓글