[파이썬(Python)] 백준 1978번 소수 찾기

2024. 11. 27. 21:00·코딩테스트 대비
728x90

 

 

백준 1978번 소수 찾기

문제 바로 가기


📌 문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다.
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

 

출력
주어진 수들 중 소수의 개수를 출력한다.

 

 

 

📝 문제 접근 방법

아이디어

주어진 수에 대해 제곱근까지만 나눗셈을 수행하여 소수를 판별

 

  • 소수 (Prime Number)
    • 1과 자기 자신만으로만 나누어떨어지는 자연수
    • 즉, 1보다 크고 다른 수로 나누어떨어지지 않는 수

 

  • 완전 탐색 방법
    • 방법
      • 숫자 n을 2부터 n - 1까지의 모든 숫자로 나누어봅니다.
      • 나눠떨어지는 숫자가 하나라도 있다면 n은 소수가 아닙니다.
      • 나눠떨어지는 숫자가 없으면 소수로 판별합니다.
    • 문제점: n - 2번의 나눗셈을 수행해야 하므로 숫자가 커질수록 연산량이 매우 많아집니다.

 

  • 제곱근까지만 확인하는 방식
    • 원리: 어떤 수 n이 합성수라면 두 인수(a, b)를 곱한 형태로 나타낼 수 있습니다.
      • $n = a \times b$
      • 여기서 두 인수 중 하나는 반드시 $\sqrt{n}$ 이하입니다. 
        • 만약 인수 a와 b가 모두  $\sqrt{n}$ 보다 크다면 $a \times b > n$ 이 되므로 불가능합니다.
    • 이유
      • 모든 약수쌍 (a, b)에서 작은 인수는 $\sqrt{n}$ 이하에 속합니다.
      • 큰 인수는 작은 인수의 대칭 쌍이므로 이미 확인한 범위에 포함됩니다.

 

 

 

👩‍💻 나의 답안

import math

def is_prime_number(x):
    if x < 2:
        return False
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i == 0:
            return False
    return True

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

result = sum(1 for num in numbers if is_prime_number(num))
print(result)

 

 

 

✨ 새로 알게 된 점

1. 소수 판별의 효율적인 방식과 원리

소수를 판별할 때, 모든 수를 확인하는 대신 제곱근까지만 탐색하면 충분하다는 점을 알게 되었습니다. 모든 약수쌍 (a, b) 중 하나는 항상 $\sqrt{n}$ 이하에 존재하기 때문에, 2부터$\sqrt{n}$ 까지만 나눗셈을 수행해도 소수 여부를 정확히 판별할 수 있습니다. 이는 약수의 대칭적 관계를 활용한 방식으로, 불필요한 연산을 크게 줄여 효율성을 높일 수 있었습니다.

 

 

 

728x90

'코딩테스트 대비' 카테고리의 다른 글

[파이썬(Python)] 백준 6588번 골드바흐의 추측  (0) 2024.11.28
[파이썬(Python)] 백준 1929번 소수 구하기  (1) 2024.11.28
[파이썬(Python)] 백준 2609번 최대공약수와 최소공배수  (0) 2024.11.26
[파이썬(Python)] 백준 11656번 접미사 배열  (0) 2024.11.18
[파이썬(Python)] 백준 11655번 ROT13  (0) 2024.11.17
'코딩테스트 대비' 카테고리의 다른 글
  • [파이썬(Python)] 백준 6588번 골드바흐의 추측
  • [파이썬(Python)] 백준 1929번 소수 구하기
  • [파이썬(Python)] 백준 2609번 최대공약수와 최소공배수
  • [파이썬(Python)] 백준 11656번 접미사 배열
랑뎁
랑뎁
  • 랑뎁
    RangDev.
    랑뎁
  • 전체
    오늘
    어제
    • 분류 전체보기 (270)
      • 취준 (59)
        • 경제신문스크랩 (59)
      • 파이썬 (2)
      • 코딩테스트 대비 (168)
      • 수학 (2)
      • 머신러닝 (0)
      • 컴퓨터비전 (1)
      • 강화학습 (33)
      • Git (3)
      • 자격증 (1)
        • 한국사 능력 검정 1급 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.2
랑뎁
[파이썬(Python)] 백준 1978번 소수 찾기
상단으로

티스토리툴바