본문 바로가기

CS/알고리즘

[230423] 소수 만들기

반응형

 

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

내 풀이 (실패)

삼중 for문에다가 전에 ‘소수 찾기’ 문제랑 동일하게 풀이했다.

function solution(nums) {
    const answer = [2, 3, 5];
    
    for(let i = 0; i < nums.length - 2; i++) {
        for(let j = i+1; j < nums.length - 1; j++) {
            for(let k = j+1; k < nums.length; k++) {
                const sum = nums[i] + nums[j] + nums[k] 
                let flag = true;
                
                for(let a = 0; a < Math.sqrt(sum); a++) { 
                    if(sum % answer[a] === 0){
                        flag = false;
                        break;
                    }
                }
                if(flag) answer.push(sum)
            }
        }
    }
    return answer.length - 3;
}

샘플 테케는 통과하는데, 실제 테케는 케테스트로피다

 

쨔란~ 인생은 19.2점

 

 

 

두 번째 풀이

어김없이 질문하기를 통해 힌트를 얻었다.

현재 코드는 중복 없는 소수를 배열 answer에 넣고 있다.

따라서 중복 있게 넣도록 코드를 수정하면 된다.

const answer = [2, 3, 5];

const isPrime = (num) => {
    if(num % 2 === 0) return false;
    
    for(let i = 2; i <= Math.sqrt(num); i++) { 
        if(num % i === 0){
            return false;
        }
    }
    return true;
}

function solution(nums) {
    let answer = 0;
    
    for(let i = 0; i < nums.length - 2; i++) {
        for(let j = i+1; j < nums.length - 1; j++) {
            for(let k = j+1; k < nums.length; k++) {
                if(isPrime(nums[i] + nums[j] + nums[k])) {
                    answer++;
                }
            }
        }
    }  
    return answer;
}

반응형

'CS > 알고리즘' 카테고리의 다른 글

[230427] 과일 장수  (0) 2023.04.27
[230424] 프로세스  (0) 2023.04.24
[230423] 연속 부분 수열 합의 개수  (0) 2023.04.23
[230423] 명예의 전당  (1) 2023.04.23
[230422] 기능개발  (0) 2023.04.22