Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

[프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript
연습장/프로그래머스 문제풀이

[프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript

2022. 6. 13. 12:32

🔗 문제 링크

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

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

✏️ 풀이

function solution(n, k) {
    const numbers = n.toString(k).split('0').map(Number);
    return numbers.reduce((acc, num) => {
        if (num <= 1) {
            return acc;
        }
        for (let i = 2; i <= Math.sqrt(num); i++) {
            if (num % i === 0) {
                return acc;
            }
        }
        return acc + 1;
    }, 0);
}

먼저 n을 k진수 문자열로 변환한 후, '0'으로 split하여 소수 여부를 판별할 숫자들을 얻는다.numbers를 순회하면서 2부터 각 숫자의 제곱근까지로 해당 숫자를 나눠보면서 단 한 번이라도 나누어 떨어지면 소수가 아니고, 한 번도 나누어 떨어지지 않으면 소수라고 판단하여 1을 누적한다. numbers 순회가 끝나면 소수가 아닐 때마다 누적된 1의 합으로 소수의 개수를 구할 수 있다.

 

처음에는 에라토스테네스의 체 방식으로 풀려고 했었다. numbers의 최댓값만큼의 길이를 가진 true로 채워진 배열을 만들고, 반복문을 돌면서 나누어 떨어지는 수를 false로 갱신하도록 하였다. 그러나, 생각보다 numbers에 담기게 되는 수의 크기가 엄청 커지기 때문에 배열 길이 제한을 넘기게 되어 런타임 에러가 발생하였다. 

 

다시 생각해보니 연속된 구간에서의 소수의 개수를 구하는 문제도 아니고, 이 문제의 특성상 numbers의 길이도 길게 나오지 않는다. (가장 긴 수가 1,000,000을 2진법으로 바꾼 11110100001001000000이지만 이조차도 numbers의 길이는 4다) 따라서 numbers의 각 수를 순회할 때마다 소수 판별을 하는 것이 더 효율적이다.

저작자표시 비영리 (새창열림)

'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글

[프로그래머스 Level 2] 주차 요금 계산 - JavaScript  (0) 2022.09.15
[프로그래머스 Level 2] 타겟 넘버 - JavaScript  (0) 2022.07.04
[프로그래머스 Level 2] n진수 게임 - JavaScript  (0) 2022.06.11
[프로그래머스 Level 2] 파일명 정렬 - JavaScript  (0) 2022.06.11
[프로그래머스 Level 2] 압축 - JavaScript  (0) 2022.06.10
    '연습장/프로그래머스 문제풀이' 카테고리의 다른 글
    • [프로그래머스 Level 2] 주차 요금 계산 - JavaScript
    • [프로그래머스 Level 2] 타겟 넘버 - JavaScript
    • [프로그래머스 Level 2] n진수 게임 - JavaScript
    • [프로그래머스 Level 2] 파일명 정렬 - JavaScript
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바