백준

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

sson-coding 2025. 10. 14. 23:50

문제 링크

https://www.acmicpc.net/problem/1978

문제

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

입력

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

출력

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

예제

입력

4
1 3 5 7

출력

3

정답 및 풀이

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

for num in numbers:
    if num > 1:
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                break
        else:
            count += 1

print(count)

  1. n = int(input())
    • 사용자로부터 정수 n을 입력받아, 검사할 숫자의 개수를 저장합니다.
  2. numbers = list(map(int, input().split()))
    • 공백으로 구분된 숫자들을 입력받아 리스트 numbers로 변환합니다.
  3. count = 0
    • 소수(prime number)의 개수를 세기 위한 변수 count를 0으로 초기화합니다.
  4. for num in numbers:
    • 입력받은 숫자들 각각에 대해 반복문을 시작합니다.
  5. if num > 1:
    • 1보다 큰 수만 소수 후보로 검사합니다. (1 이하의 수는 소수가 아님)
  6. for i in range(2, int(num ** 0.5) + 1):
    • 2부터 num의 제곱근까지 반복하며, num이 소수인지 검사합니다.
    • 이유: 소수는 자기 자신과 1 외에는 나눠지지 않으므로, 제곱근까지만 검사해도 충분합니다.
  7. if num % i == 0:
    • 만약 num이 i로 나누어 떨어지면(= 나머지가 0이면)
    • num은 소수가 아니므로 바로 반복문을 break로 종료합니다.
  8. else: (for-else 구조)
    • 반복문이 break 없이 끝났다는 뜻 → num이 소수라는 뜻입니다.
    • 따라서 count += 1로 소수 개수를 1 증가시킵니다.
  9. print(count)
    • 최종적으로 소수의 개수를 출력합니다.

새롭게 배운 내용 및 느낀점

  • for-else 문
  • for 변수 in 반복가능객체: if 조건: break else: # 반복문이 break 없이 끝났을 때 실행