Notice

[Python] 백준 1978번 소수 찾기

문제

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

입력

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

출력

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

 

예제 입력 1

4
1 3 5 7

예제 출력 1

3

 


풀이

N = int(input())
num = list(map(int, input().split()))

ans = []
for i in num:
    cnt = 0		# 나누었을 때 0이 되는 숫자의 개수
    for j in range(1, i + 1):
        if i % j == 0:    # 입력 받은 숫자를 1부터 자기자신의 수까지 나누어, 나머지가 0인 횟수를 구함
            cnt += 1
    ans.append(cnt)		# 입력 받은 숫자의 cnt 값을 추가

minority = 0
for i in ans:
    if i == 2:		# 위의 cnt 값이 2이면 소수
        minority += 1

print(minority)

 

 

다른 풀이 이해

풀이1

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

sosu = 0
for num in numbers:
    error = 0
    if num > 1 :
        for i in range(2, num):  # 2부터 n-1까지
            if num % i == 0:
                error += 1  # 2부터 n-1까지 나눈 몫이 0이면 error가 증가
        if error == 0:
            sosu += 1  # error가 없으면 소수.
 
 print(sosu)

입력 받은 수 num이 1보다 클 때, 2부터 (num -1) 까지의 수와 나누어 지는 수가 없으면 error = 0

나누어 지는 수가 있으면 error에 1씩 더한다.

error가 0이면 소수이다.

 

 

풀이2

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

for x in data:
  for i in range(2, x+1):   # 2부터 입력한 숫자 x까지
    if x % i == 0:
      if x == i:        # i가 x에 도달해 나눠지면 그 수는 소수이므로 +1
        count += 1
      break				# 입력한 숫자 x까지 도달하지 못하고 나눠지면 소수가 아니므로 멈춤

print(count)

 

글쓰기 설정