Study/Baekjoon Online Judge

[백준/파이썬] 1978. 소수 찾기

growingtree 2021. 7. 3. 16:17
728x90

문제

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

 

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다.

다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

 

출력

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

 

아이디어

소수는 약수가 1과 자기자신 총 2개밖에 없다는 점

 

코드 

num = int(input())
lis = list(map(int,input().split(" ")))


count = 0

for x in lis:
    if x!=1:
        remain = []
        for y in range(1,x+1):
            if x%y ==0:
               remain.append(y)
        if len(remain) == 2:
            count+=1

print(count)

해설

num = int(input()) #주어진 조건대로 첫 줄에 전체 개수를 입력받기 
lis = list(map(int,input().split(" "))) #두번째 줄에는 공백으로 구별된 입력값을 정수로 바꾸고 리스트로 lis 변수에 저장한다. 

count = 0  #소수여부를 판별해서 소수인 경우 count값을 +1 한다. 

 

for x in lis: # 리스트의 요소들을 for 문으로 하나씩 접근 
    if x!=1: #만약 x 값이 1이 아니라면 (1은 소수가 아니므로 x가 1인 경우는 생각하지 않는다) 
        remain = [] # x값이 1이 아니라면, x값의 나머지를 담을 새로운 리스트 remain 생성 
        for y in range(1,x+1): # 1부터 x까지 하나씩 y 라는 변수로 저장됨 
            if x%y ==0: # 만약 x를 y로 나눴을 때 나머지가 0 이면 ( 즉 나누어 떨어진다면) 
               remain.append(y) # remain 변수에 y를 추가한다. 
        if len(remain) == 2: #위 for문을 다 돌고 나왔을 때 remain 리스트의 길이가 2라면 ( x를 나누어 떨어뜨리는 수가 1과 자기자신 밖에 없는 경우에 해당) 
            count+=1 #count 변수에 1을 추가한다. 

print(count) #전체 lis에서 소수 개수만 출력된다. 

 

 

3일동안 날 괴롭혔던 문제 해결

4달 전의 나는 대체 어떻게 문제를 푼 것인가 ;;;

반응형