1 분 소요

뒤집은 소수

문제 정리

입력

5 // n
32 55 62 3700 250 // n개의 자연수

처리 과정

reverse(x) 작성

  1. x가 인자로 들어왔을 때 x의 일의 자리(t)를 떼어내기
  2. 그 일의 자리(t)를 이용한 reverse()의 핵심코드가 res = res*10+t
  3. 일의 자리를 떼어낸 x로 업데이트

isPrime(x) 작성

  1. 100이 reverse되어 1이 isPrime()의 인자로 넘어올 수도 있으니 x가 1일 경우 False 리턴
  2. for문을 이용해 x가 i로 나누어떨어진다면 False 리턴
  3. x의 약수는 1과 자기자신(x)빼고는 (x//2)+1을 넘지 않으니 for문의 range는 range(2,(x//2)+1)
  4. for-else를 이용해 for문에서 리턴되지 않으면 else에서 True 리턴

출력

8

내 답

import sys
sys.stdin = open("./input/in8.txt", "rt")

n = int(input())
lst = list(map(int, input().split()))

def reverse(x):
    # 숫자를 각 자리수의 정수 리스트로 변환
    x_lst = list(map(int, str(x))) 
    # x_lst.reverse() # 이거 하면 반대로 나옴!
    result=0
    for i,val in enumerate(x_lst):
        result += val * (10**i) # 10의 i승
    return result

def isPrime(x):
    ch = [0]*(x+3)
    for i in range(2,x+1):
        if ch[i]==0:
            # ch[i]는 소수이다.
            for j in range(i+i,x+1,i):
                ch[j]=1
    if ch[x]==0: 
        return True # 0이면 소수
    return False # 1이면 소수 아님

## 아래와 같은 코드
# for i in range(n):
#     if isPrime(reverse(lst[i]))==True:
#         print(reverse(lst[i]), end=' ')

for x in lst:
    if isPrime(reverse(x))==True:
        print(reverse(x), end=' ')

풀이

import sys
sys.stdin = open("./input/in8.txt", "rt")

n = int(input())
lst = 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):
    # 100이 reverse되어 1이 isPrime()의 인자로 넘어올 수도 있는 상황
    if x==1:
        return False

    for i in range(2,(x//2)+1): # x의 약수는 1과 자기자신(x)빼고는 (x//2)+1을 넘지 않는다
        if x%i==0:
            return False
    else:
        return True # for문에서 False를 리턴하지 않으면 소수(True)인 것

for x in lst:
    tmp = reverse(x)
    if isPrime(tmp):
        print(tmp, end=' ')

정리

  • reverse()isPrime()의 논리 이해하기
  • 어떤 수(x)의 약수는 자기 자신(x)을 제외하고는 (x//2)+1을 넘지 않는다

    이유? 예를들어 어떤수가 20이라고 한다면,
    20의 약수는 (1,20), (2,10), … 이기 때문에 10(=20//2 + 1)을 넘지 않는 것이다



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: