문제 링크
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)
- n = int(input())
- 사용자로부터 정수 n을 입력받아, 검사할 숫자의 개수를 저장합니다.
- numbers = list(map(int, input().split()))
- 공백으로 구분된 숫자들을 입력받아 리스트 numbers로 변환합니다.
- count = 0
- 소수(prime number)의 개수를 세기 위한 변수 count를 0으로 초기화합니다.
- for num in numbers:
- 입력받은 숫자들 각각에 대해 반복문을 시작합니다.
- if num > 1:
- 1보다 큰 수만 소수 후보로 검사합니다. (1 이하의 수는 소수가 아님)
- for i in range(2, int(num ** 0.5) + 1):
- 2부터 num의 제곱근까지 반복하며, num이 소수인지 검사합니다.
- 이유: 소수는 자기 자신과 1 외에는 나눠지지 않으므로, 제곱근까지만 검사해도 충분합니다.
- if num % i == 0:
- 만약 num이 i로 나누어 떨어지면(= 나머지가 0이면)
- num은 소수가 아니므로 바로 반복문을 break로 종료합니다.
- else: (for-else 구조)
- 반복문이 break 없이 끝났다는 뜻 → num이 소수라는 뜻입니다.
- 따라서 count += 1로 소수 개수를 1 증가시킵니다.
- print(count)
- 최종적으로 소수의 개수를 출력합니다.
새롭게 배운 내용 및 느낀점
- for-else 문
- for 변수 in 반복가능객체: if 조건: break else: # 반복문이 break 없이 끝났을 때 실행
'백준' 카테고리의 다른 글
| [백준] 11653 : 소인수분해 (Python/파이썬) (0) | 2025.10.14 |
|---|---|
| [백준] 2501 : 약수 구하기 (Python/파이썬) (0) | 2025.10.14 |
| [백준] 9506 : 약수들의 합 (Python/파이썬) (0) | 2025.10.14 |
| [백준] 2501 : 약수 구하기 (Python/파이썬) (0) | 2025.10.14 |
| [백준] 5086 : 배수와 약수 (Python/파이썬) (0) | 2025.10.12 |