[Algorithm] 뒤집은 소수

myeonji·2022년 1월 17일
0

Algorithm

목록 보기
5/89

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하여 프로그래밍 한다.

<내 답안>

def reverse(x):
    res = 0
    while x>0:
        t = x%10
        res = res*10+t
        x = x//10
    return res

def isPrime(x):
    cnt = 0
    for i in range(1, x+1):
        if x % i == 0:
            cnt += 1
    if cnt == 2:
        return True
    else:
        return False

n = int(input())
list1 = list(map(int, input().split()))
for i in list1:
    a = reverse(i)
    if isPrime(a) == True:
        print(a, end=' ')

reverse 함수가 관건이였다.

<자릿수의 합> 문제랑 같은 유형이였는데..
자릿수를 분리해야 하나 생각은 했지만 아무래도 문자열로 바꿔서 뒤집은 다음 다시 정수형으로 바꾸는 방식인 것 같아서 그렇게만 계속 풀었다.
자릿수를 이용하는 방식이였을 줄이야.. 게다가 자릿수를 이용해서 뒤집는 방법이 좀 신선하다. 이렇게도 풀 수 있구나 깨닫게 된 문제이다.

아, 그리고 isPrime에서 나는 소수를 구할 때 '소수 = 약수는 1과 내 자신(약수 2개)' 로 생각하고 풀었는데, 해설에서는 for-else를 이용하여 풀었다.
아직 내가 for-else에 익숙하지 않아서 그런지 이 구문을 사용하여 푸는 것이 좀 어색하다.

# ** 모범답안 참고 **

# 문자열은 불변
## 뒤집은 소수
def reverse(x):
    res = 0
    while x>0:
        t = x%10
        res = res*10+t
        x = x//10
    return res

def isPrime(x):
    cnt = 0
    if x == 1:
        return False

    '''해설
    for i in range(2, x//2+1):
        if x%i == 0:
            return False
    else:  # 나눠지는 i가 없으면 = if문 들어가지 않고 for문이 정상종료 되면
        return True
     '''

    '''내가 푼 부분
    for i in range(1, x+1):
        if x % i == 0:
            cnt += 1
    '''

    if cnt == 2:
        return True
    else:
        return False

n = int(input())
list1 = list(map(int, input().split()))
for i in list1:
    a = reverse(i)
    if isPrime(a) == True:
        print(a, end=' ')

0개의 댓글