Computer Science/자료구조

[6.6] 프로그래머스 코딩테스트 연습 - 소수 만들기 (7/100)

토마토. 2021. 6. 6. 19:26

코딩테스트 연습 - 소수 만들기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

어렵다....

def solution(nums):
    summ = set()
    prime = []
    answer = 0
    for i in range(len(nums)):
      for j in range(i+1, len(nums)):
        for k in range(j+1, len(nums)):
          m = (nums[i], nums[j], nums[k])
          if m not in summ:
            summ.append(m)
    
    a = [False, False] +  [True] *999

    for i in range(2, 1001):
      if a[i]:
        prime.append(i)
        for j in range(2*i, 1001, i):
          a[j] = False
    
    for i in summ:
      l = sum(i)
      if l in prime:
        answer += 1
    return answer

모르겠다. (어떤 경우를 놓친 건지 모르겠음 - 어떤 테스트가 있었을까? )

 

def prime(n):
    prime = []
    array = [True for i in range(n+1)]

    for i in range(2, n+1):
      if array[i] == True:
        j = 2
        while i * j <= n:
          array[i*j] = False
          j += 1
      
      if array[i]:
        prime.append(i)
    return prime

def solution(nums):
    summ = set()
    n = len(nums)
    answer = 0
    pri = prime(1000)
    for i in range(0, n-2):
      for j in range(i+1, n-1):
        for k in range(j+1, n):
          if (nums[i], nums[j], nums[k]) not in summ:
            summ.add((nums[i], nums[j], nums[k]))

    #prime 구해주자...
    for i in summ:
      if sum(i) in pri:
        answer += 1
    
    if answer >= 1:
      pass
    elif answer == 0:
      answer = -1
    
    return answer