Level1 - 소수 만들기

손대중·2022년 3월 20일
0

문제 설명 및 링크

https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript

나의 풀이

이전에 풀었던 거긴 한데, 다시 한번 풀어보았다. (소수 구하는 알고리즘도 다시 볼겸)

  • 소수 판별하는 boolean map 생성
  • array 내 3개 숫자를 조합하고 boolean map 을 통해 소수인지 판별
    • 3개 숫자 조합은 걍 for 문 3개 씀
    • 어차피 array 최대 길이가 50 밖에 안되기 때문에 최대 50 * 49 * 48 번만큼만 돔.

코드

모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.

function solution(nums) {

    const sosuMap = [false, false, true];
    
    // 1000 이하의 소수맵 만들기 (에라토스테네스의 체)
    for (let i = 2; i < 3000; i++) {
        if (sosuMap[i] === false) {
            continue;
        }

        sosuMap[i] = true;

        let temp = i + i;

        while (temp < 3000) {
            sosuMap[temp] = false;
            temp += i;
        }
    }

    // 3개 숫자 조합하면서 소수인지 판별 & count
    let count = 0;
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            for (let x = j + 1; x < nums.length; x++) {
                if (sosuMap[nums[i] + nums[j] + nums[x]]) {
                    ++count;
                }
            }
        }
    }
    
    return count;
}

0개의 댓글