문제
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
입력
입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.
출력
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
예제 입력 1 복사
60
100
예제 출력 1 복사
620
61
예제 입력 2 복사
64
65
예제 출력 2 복사
-1
M = int(input()) # M 이상
N = int(input()) # N 이하
cnt = 0
lst_2 = []
for i in range(M, N+1):
lst = []
for j in range(1, i+1):
if i % j == 0:
lst.append(j)
if len(lst) == 2:
cnt += 1
for k in lst:
lst_2.append(i)
if len(lst_2) == 0:
print(-1)
else:
lst_remove = set(lst_2)
list = list(lst_remove)
# print('list: ', sorted(list))
print(sum(list))
# print(lst_2)
print(lst_2[0])
시간 초과...흠
M = int(input()) # M 이상
N = int(input()) # N 이하
cnt = 0
lst_2 = []
for i in range(M, N+1):
lst = []
for j in range(1, i+1):
if i % j == 0:
lst.append(j)
if len(lst) == 2:
cnt += 1
lst_2.append(i)
if len(lst_2) == 0:
print(-1)
else:
lst_remove = set(lst_2)
list = list(lst_remove)
print(sum(list))
print(lst_2[0])
세 번째 for문을 지우고, 한 수에 대해서 두 번째 for문이 끝나고 cnt가 증가될 때가 소수일 경우이니 그 때만 리스트에 수를 추가하는 방법으로 바꿨다.
m=int(input())
n=int(input())
li=[]
for i in range(m,n+1):
e=0
if i>1:
for j in range(2,i):
if i%j==0:
e+=1
break
if e==0:
li.append(i)
if len(li)<1:
print(-1)
else:
print(sum(li))
print(min(li))
근데 이렇게 풀 수 있다고 한다..
시간이 1/8이다... 내가 쓴 코드는 별로다
그래서 이걸 토대로 다시 풀어봤다.
M = int(input())
N = int(input())
lst = []
for i in range(M, N+1):
for j in range(2, i+1):
if i % j == 0:
if i == j:
lst.append(i)
break
if len(lst) == 0:
print(-1)
else:
print(sum(lst))
print(lst[0])
걸리는 시간이 가장 짧다.
break는 i와 j가 같지 않을 경우 바로 for문을 멈추고 다음 숫자로 넘어간다.
break를 넣지 않으면 모든 수가 다 리스트에 추가되기 때문에 주의해야 한다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 > 단계별로 풀어보기 > 기하: 직사각형과 삼각형 > 1085번: 직사각형에서 탈출 (0) | 2024.07.23 |
---|---|
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 11653번: 소인수분해 (1) | 2024.07.23 |
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 1978번: 소수 찾기 (1) | 2024.07.22 |
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 9506번: 약수들의 합 (2) | 2024.07.22 |
백준 > 단계별로 풀어보기 > 약수, 배수와 소수 > 2501번: 약수 구하기 (2) | 2024.07.22 |