프로그래머스 Lv1. 소수 만들기

용상윤·2021년 4월 29일
0

문제

Summer/Winter Coding(~2018)
https://programmers.co.kr/learn/courses/30/lessons/42862


접근

  1. "에라토스테네스의 체"를 이용한 소수의 배열을 구한다.
  2. 중복이 허용된 순열의 조합을 구한다.

코드

python

def solution(nums):
    n = int(sum(nums))
    sosu = [True] * (n+1)
    sosu[0:2] = [False, False]
    for num in range(2, int(n**0.5)+1) :
        if sosu[num] :
            for i in range(num*num, n+1, num) :
                sosu[i] = False
    #print(f"sosu : {sosu}")
    
    result = 0
    leng = len(nums)
    for i in range(0, leng-2) :
        for j in range(i+1, leng-1) :
            for k in range(j+1, leng) :
                #print(i,j,k)
                if sosu[nums[i]+nums[j]+nums[k]] :
                    result += 1
    
    return result
    

js

function solution(nums) {
    const sum_n = nums.reduce((a,b) => a+b);
    const n = nums.length;
    let sosu = Array.from({length : sum_n+1}, v => true);
    
    for(var num=2; num <= Math.sqrt(sum_n); num++){
        if(sosu[num]){
            for(var i=num*num; i<=sum_n; i+=num){
                sosu[i] = false;
            }
        }
    }
    
    let result = 0;
    for(let i=0; i<n-2; i++){
        for(let j=i+1; j<n-1; j++){
            for(let k=j+1; k<n; k++){
                if(sosu[nums[i]+nums[j]+nums[k]]){
                    result ++;
                }
            }
        }
    }
    return result;
}

✍ 메모

Array.from

[True, True, True] 와 같은 배열을 만들 때,

python

[True] * 3

js
Array.from({length : 3}, v => true);

중복이 허용된 순열
[1,2,3,4,5] 와 같이 5개의 원소 중 3개의 원소를 고르는 경우의 수는 (중복을 허용할 때) 5x4x3 / 3x2x1 = 10가지 이다.

li = [1,2,3,4,5]
leng = len(li)
for i in range(0, leng-2) :
        for j in range(i+1, leng-1) :
            for k in range(j+1, leng) :
                print( li[i], li[j], li[k] )

결과
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
profile
달리는 중!

0개의 댓글