본문 바로가기
Algorithm/Baekjoon

백준 2581번

by minhi 2024. 7. 9.

직전 문제에 이어 또 시간 초과 에러가 발생했다.

 

처음 제출한 코드는 다음과 같다.

import sys

M = int(sys.stdin.readline())
N = int(sys.stdin.readline())

p = []
min = 0

for i in range(M, N+1):
    if i == 1:
        continue
    
    f = 0

    for j in range(i):
        if j+1 == 1:
            continue
        elif j+1 == i:
            continue
        elif i % (j+1) == 0:
            f += 1
    
    if f == 0:
        p.append(i)

if len(p) == 0:
    print(-1)
else:
    print(sum(p))
    print(p[0])

 

역시나 반복문이 문제가 되었을 것이다.

 

for j in range(i): 반복문에서 사실 약수가 2개가 넘어가면 이미 소수가 아니므로 그 이상의 확인을 위한 반복은 무의미하다.

 

약수의 개수가 2개를 넘어갔는지 확인하는 조건문을 추가해 수정하였다.

import sys

M = int(sys.stdin.readline())
N = int(sys.stdin.readline())

p = []
min = 0

for i in range(M, N+1):
    if i == 1:
        continue
    
    f = 0

    for j in range(i):
        if j+1 == 1:
            continue
        elif j+1 == i:
            continue
        elif i % (j+1) == 0:
            f += 1
            if f > 0:
                break
    
    if f == 0:
        p.append(i)

if len(p) == 0:
    print(-1)
else:
    print(sum(p))
    print(p[0])

 

무의미한 반복이 이루어지지 않도록 주의하기!

 

※ 이 문제 좀 더 효율적으로 다시 풀어보자

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 1330번  (0) 2024.09.28
백준 2941번  (0) 2024.07.10
백준 2869번  (0) 2024.07.09
백준 2745번  (0) 2024.07.06
백준 2563번  (0) 2024.07.06