less than 1 minute read

Brute force

# prime_list는 1부터 10000사이의 소수가 오름차순으로 저장된 리스트예요.
from prime import prime_list
import math

def is_prime(x):
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i == 0:
            return False 
    return True

# 합계가 짝수가 되는 두 소수를 찾는 함수예요.
def goldbach(arr):
    # 합계가 짝수가 되는 두 소수를 작은 수부터 차례로 리스트에 저장해 주세요.
    answer = []
    for n in arr:
        i = 0
        ex = []
        while (prime_list[i] <= n //2):
            diff = n - prime_list[i];
            if diff in prime_list:
                ex.append([prime_list[i], diff])
            i += 1
        answer.append(ex)
    final_answer = []
    for a in answer:
        final_answer.append(a[-1])
    return final_answer

arr = [int(x) for x in input().split()]

for i in goldbach(arr):
    print(i[0], i[1])
  • 소수리스트가 주어져있을때, 소수리스트의 작은 원소를 기준으로 두고, 그 기준과 원소의 차이를 구해서 그 차이가 소수인지 확인하는 작업을 통해 구한다. 다만, 소수가 확인하는 작업을 할때, 시간이 많이 걸리는것 같고
  • 도대체 어디서 시간이 그렇게 많이 걸릴까???
  • 정석풀이는 10000개의 크기의 배열을 선언하고, 이 10000개의 배열에 소수인지 아닌지 마킹한다. 그래서, O(1)의 시간으로 바로바로 소수인지 아닌지 확인할 수 있는데, 나는 diff in prime_list 에서 시간이 정말 많이 걸리는것 같다. 만약, 배열을 선언하고 바로바로 소수인지 확인했으면 시간이 덜 걸렸을 텐데, 이 엘리스에서 요구하는 조건을 사용하다 보니까 시간이 .. ㅋㅋㅋ 안습이다.

Leave a comment