개발자 첫걸음/프로그래머스

프로그래머스 [level2] k진수에서 소수 개수 구하기

프로아마추어 2022. 10. 5. 20:25

https://school.programmers.co.kr/learn/courses/30/lessons/92335

 

프로그래머스

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

programmers.co.kr

 

입출력 예시

 

나의 접근

  • 1은 소수가 아니다.
  • 처음에는 단순히 for문을 사용하였다. for(i = 2; i < number; i++) -> i로 number를 나눴을 때 나머지가 0이면 소수가 아님 -> 테스트 케이스 1번에 시간 초과 오류 발생
  • 다른 해설을 참고하여 제곱근을 구하는 함수를 사용하였다. Math.sqrt(number) -> Math.sqrt(number) > Math.floor(Math.sqrt(number))의 조건이 참이면 소수인 줄 알았다. 
  • 처음 for을 사용했을 때 처럼 범위를 제곱근까지로 바꾸어보았다. for(i = 2; i < Math.sqrt(number); i++) -> 제곱근으로만 나머지가 0이된다면 소수. -> collect

 

나의 답안

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(n, k) {
    var answer = 0;
    
    // 숫자를 k진수로 변환
    const convertArr = n.toString(k).split(0).filter(it => parseInt(it) !== 1);
 
    convertArr.forEach(num => {
        let check = 1;
        if(Boolean(num)) {
            const sqrt = Math.sqrt(num);
            
            // 2 ~ 제곱근까지 나눠지지 않으면 소수
            for(let i = 2; i <= sqrt; i++) {
                if(num % i === 0) {
                    check = 0;
                }
            }
            answer += check;
        }
    })
    return answer;
}
cs