티스토리 뷰

반응형

 

[Python] 백준 알고리즘 온라인 저지 1978번 : 소수 찾기

 

Python3 코드

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)

 

 

Python3 코드 풀이

 

1. 작성한 코드에 대한 전체적인 내용 풀이

소수 : 1과 자기 자신으로 나눌 때만 나누어 떨어지는 자연수이다. 1은 소수가 아니고 2는 소수 중에 유일한 짝수이다. 2를 제외한 나머지 소수는 모두 홀수로 이루어져 있다. (예 : 2, 3, 5, 7, 11...)

 

이 문제는 n개의 숫자가 주어지면 그중 소수인 숫자가 몇 개인지를 출력하는 문제이다. 입력받은 숫자들 중 소수인 수를 찾아내는 방식으로 문제를 풀었다. 소수를 판별하기 위해서 각 숫자가 1부터 해당 숫자까지의 숫자 범위에서 1과 자기 자신을 제외한 수로 나누어 떨어지는지 여부를 if 조건식을 이용해서 찾아냈다. 

 

2. 코드 상단부, 숫자를 입력받는다.

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

먼저 숫자의 개수 n을 입력받고 그다음에 숫자 n개의 숫자들을 공백으로 구분한 하나의 문자열로 입력받는다. 문자열로 입력받은 n개의 수는 split을 이용해서 공백을 기준으로 나누고서 map 함수를 이용해서 int로 변환하였다. 이 숫자들은 numbers 변수에 선언하였다. 그리고 이 문제를 풀 때 맨 처음 입력받은 숫자 n은 사용하지 않았다. 

 

3. 소수인지 아닌지 찾아내는 코드를 작성한다.

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가 없으면 소수.

첫 번째 for문으로 numbers 변수에 있는 숫자들을 하나씩 num변수에 선언하였다. 그리고 num의 수가 1보다 큰 경우 2번째 for문에서 생성된 변수 i를 나누어서 0으로 나누어 떨어지는지를 확인하였다. 이때 두 번째 for문의 숫자 범위는 2부터 num-1까지의 범위이다.

 

1과 자기 자신을 제외한 숫자로 나누었을 때 0으로 나누어 떨어지면 error 변수에 1을 더해주었다. 이후 2번째 반복문이 끝나고서 error 변수가 0이면 1과 자기 자신을 제외한 숫자로는 나누어 떨어지지 않은 것이므로 소수가 된다. 소수인 경우 sosu 변수에 1을 추가해서 for문이 모두 끝난 후 sosu 변수를 출력하였다.

 

error변수는 첫 번째 for문이 시작될 때마다 0으로 선언하였다.

 

반응형
댓글
반응형