본문 바로가기
코딩테스트/백준

백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 1978번: 소수 찾기

by 나는야석사 2024. 7. 22.

문제

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

입력

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

출력

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

예제 입력 1 복사

4
1 3 5 7

예제 출력 1 복사

3

 

이번에도 검색 없이 풀었다...! 대견하다 ㅎㅎ

 

N = int(input())

arr = map(int, input().split())
cnt = 0     # 소수의 개수 표시할 변수

for i in arr:   # 입력받은 arr을 순회하며
    lst = []    # i가 바뀔 때마다 리스트 리셋, 소수를 추가해서 나중에 개수 셀 때 사용할 것임
    for j in range(1, i+1):     # i를 받고, 1부터 i까지 순회하며
        if i % j == 0:          # i가 j로 나누어 떨어지면
            lst.append(j)       # 리스트에 j 추가
    if len(lst) == 2:           # 리스트의 길이가 2면, 즉 리스트에 2개 밖에 없으면(1과 자기자신만 있을 수 있음)
        cnt += 1                # cnt 1 증가
print(cnt)

 

설명은 주석으로 대신하겠다.

 

입력을 배열 형태로 받아 배열을 순회하며, 순회하는 수가 바뀔 때마다 소수를 추가할 리스트를 초기화 해줌

순회할 때마다 1부터 i까지 한 번 더 순회하며 나누어 떨어지면 리스트에 나누는 수 추가

리스트의 길이가 2이면, 즉 리스트에 2개만 있다면 1과 자기자신으로만 나누어 떨어지니까 소수인 것임. 

그 때 cnt, 소수의 개수를 표시할 변수를 1 증가시킨다.

 

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

for x in data:
  for i in range(2, x+1):
    if x % i == 0:
      if x == i:
        count += 1
      
      break

print(count)

이렇게 풀 수 있네....

주어진 입력을 순회하며 2부터 입력까지, x가 i로 나누어 떨어지면서 x가 i 일때. 즉 자기 자신으로 나누어 떨어질대 count 변수 1 증가.

x가 i로 나누어 떨어졌는데 x와 i가 다른 경우, break