ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] BOJ 4134 : 다음 소수
    코딩테스트/백준 2024. 9. 23. 09:16

    요구사항

    1. 각각 테스트 케이스에 대해서 N보다 같거나 큰 소수 중 가장 작은 소수를 한 줄에 하나씩 출력할 것. 

    설게

    1. 주어진 N이 소수인지 아닌지 판별한다.
    2. 맞다면 N 출력
    3. 아니라면 N을 1씩 키워 소수인지 판별한다. 

    실수 과정 1. [TypeError]

    def isPrime(number):
        count = 0
        for i in range(math.sqrt(number)):
            if number // i == 0:
                count +=1
        if count == 1: return True
        else: return False
    • range() 안에는 정수가 들어가야된다. 
    for i in range(int(math.sprt(number))

    실수 과정 2. [ZeroDivisionError]

    def isPrime(number):
        count = 0
        for i in range(int(math.sqrt(number))):
            if number // i == 0:
                count +=1
        if count == 1: return True
        else: return False
    • number // i == 0 에서 i 가 0부터 시작하기 때문에 위와 같은 오류가 생긴다. 
    • 추가로 number // i == 0 이 아니라 number % i == 0: 이 맞다... 

    실수 과정 3. [Trackback]

    • 이 부분은 왜 오류가 나는 지 모르겠어서 피티형님께 여쭤봤다. 
    • 무한 재귀 호출: makePrim 함수는 현재 isPrime 함수가 참이 될 때까지 계속해서 재귀 호출을 수행합니다. 하지만 makePrim 함수 안에서 재귀 호출 후 아무것도 반환하지 않기 때문에 무한 루프에 빠질 가능성이 있습니다.

    정답 답안 예시 

    import sys, math
    input = lambda: sys.stdin.readline().rstrip()
    
    N = int(input())  # 입력 개수 N
    
    prime = [int(input()) for _ in range(N)]  # N개의 입력 숫자 리스트
    
    def isPrime(number):
        if number < 2:
            return False
        for i in range(2, int(math.sqrt(number)) + 1):
            if number % i == 0:
                return False
        return True
    
    def makePrime(number):
        if number <= 1:  # 0 또는 1은 2로 처리
            return 2
        
        while not isPrime(number):  # 소수가 나올 때까지 반복
            number += 1
        return number
    
    for i in prime:
        if isPrime(i):
            print(i)
        else:
            print(makePrime(i))  # 소수가 아닌 경우 가장 가까운 소수를 출력
    • 추가로 0과 1은 소수가 아니라고 본다. (이 부분 때문에 고생 좀 했다. )
Designed by Tistory.