Summer/Winter Coding(~2018)
https://programmers.co.kr/learn/courses/30/lessons/42862
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
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