티스토리 뷰

반응형

 

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

 

Python3 코드

start_num = int(input())
last_num = int(input())

sosu_list = []
for num in range(start_num, last_num+1):
    error = 0
    if num > 1 :
        for i in range(2, num):  # 2부터 num-1까지
            if num % i == 0:
                error += 1
                break  # 2부터 num-1까지 나눈 몫이 0이면 error가 증가하고 for문을 끝냄
        if error == 0:
            sosu_list.append(num)  # error가 없으면 소수리스트에 추가
            
if len(sosu_list) > 0 :
    print(sum(sosu_list))
    print(min(sosu_list))
else:
    print(-1)

 

 

Python3 코드 풀이

 

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

이번 문제는 숫자의 범위가 주어지면 소수를 구하고서 소수들의 합과 최솟값을 출력하는 문제이다. 만일 소수가 없다면 -1을 출력해야 한다.

 

이번 문제를 풀 때는 주어진 문제에 대해서 직관적으로 코드로 작성했다. 먼저 숫자 범위를 먼저 생성하고서 반복문을 이용해서 숫자를 꺼낼 때마다 1과 자기 자신을 제외한 수를 하나하나 나눠서 나누어 떨어지는 수가 없으면 소수 리스트에 더해가는 방식으로 풀었다.

 

위 코드로 제출했을 때 정답이라고 나와서 시간 단축에 대해서는 더 고려하지 않았다. 

 

2. 코드 중반부, 소수를 구하는 코드를 작성한다.

sosu_list = []
for num in range(start_num, last_num+1):
    error = 0
    if num > 1 :
        for i in range(2, num):  # 2부터 num-1까지
            if num % i == 0:
                error += 1
                break  # 2부터 num-1까지 나눈 몫이 0이면 error가 증가하고 for문을 끝냄
        if error == 0:
            sosu_list.append(num)  # error가 없으면 소수리스트에 추가

소수를 판별하기 위해서 반복문을 포함한 반복문 코드를 작성하여 두 개의 숫자 범위가 반복할 수 있도록 했다. 첫 번째 숫자 범위는 입력받은 두 수의 범위이다. 변수 이름은 start_num, last_num으로 지정하였다. 그리고 두 번째 숫자 범위는 상위 for문에서 생성된 num 변수의 숫자를 나눌 숫자이다. 1과 num변수 사이의 숫자로 변수 이름은 i로 정하였다.

 

num변수가 1보다 큰 경우 num과 i를 나누어서 나머지가 0인 경우 소수가 아니므로 error 변수에 1을 더해주었다. 하위 for문이 모두 끝나고서 error 변수가 0이면 소수이므로 이 수를 append 함수로 리스트에 추가하였다.  

 

3. 코드 하단부, 출력문을 작성한다.

if len(sosu_list) > 0 :
    print(sum(sosu_list))
    print(min(sosu_list))
else:
    print(-1)

if 조건식을 이용해서 위에서 생성한 소수 리스트의 원소 개수가 0보다 크면 소수의 합과 최솟값을 출력하고 0이면 -1을 출력한다. 소수의 합을 구할 때는 sum 함수, 최솟값을 구할 때는 min함수를 사용하였다.

 

반응형
댓글
반응형