ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] BOJ 1929 : 소수 구하기
    코딩테스트/백준 2024. 9. 23. 09:53

    요구사항

    1. M 이상 N이하의 소수를 한 줄에 하나씩 출력해라.

    설계

    1. M과 N 을 입력 받는다. 
    2. M과 N 사이의 수들 중 소수인지 아닌 지 판별하여 소수만 출력한다.

    실수 1 [의도와 다른 결과값 출력]

    import sys, math
    input = lambda: sys.stdin.readline().rstrip()
    
    M, N = map(int, input().split())
    
    def isPrime(number):
        if number < 2:
            return 2
        for i in range(2, int(math.sqrt(number)) + 1):
            if number % i == 0:
                return
        return True
    
    
    for i in range(M,N+1):
        print(isPrime(i))
    # 입력
    3 16
    
    # 출력 
    3
    None
    5
    None
    7
    None
    None
    None
    11
    None
    13
    None
    None
    • None이 나오지 않게 해야된다. 
    for i in range(M,N):
        if isPrime(i) == None:
            continue
        print(isPrime(i))
    • 해결했지만 찝찝하다. 다른 방법이 없나 pt 형님께 여쭤본다.
    for i in range(M,N):
        if isPrime(i):
            print(i)
    • isPrime(i) 일 경우에만 print(i) 해준다. 

    실수 2 [잘못된 의도]

    def isPrime(number):
        if number < 2:
            return 2
        for i in range(2, int(math.sqrt(number)) + 1):
            if number % i == 0:
                return False
        return True
    • 함수 판별하는 함수 로직 중 if number < 2: return 2를 하게 되어 있다. 
    • 0과 1은 소수가 아니므로 retrun False 를 할 수 있도록 하자. 

    정답 답안 예시 

    import sys, math
    input = lambda: sys.stdin.readline().rstrip()
    
    M, N = map(int, input().split())
    
    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
    
    
    for i in range(M,N+1):
        if isPrime(i):
            print(i)

     

Designed by Tistory.