본문 바로가기
코테연습

80. k진수에서 소수 개수 구하기 Javascript

by hxunz 2022. 7. 28.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 정수 n을 k 진수로 바꿨을 때, 변환된 수 안에 조건에 맞는 소수가 몇개인지 구하라.
  • 주어진 자료는 무엇인가?
     - 정수 n
     - k 진수
  • 조건은 무엇인가?
     -
    0P0처럼 소수 양쪽에 0이 있는 경우
     - P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우
     - 0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우
     - P처럼 소수 양쪽에 아무것도 없는 경우
     - 단, P는 각 자릿수에 0을 포함하지 않는 소수입니다.
    • 예를 들어, 101은 P가 될 수 없습니다.
  • 숨겨진 조건이나 자료가 있는가? 그렇다면 그 것을 다른 방법으로 해석해보라.
     - 10진법으로 보았을 때 소수여야 한다

2. 계획

  • 전에 비슷한 문제를 알고 있는가?
     - 소수구하기
  • 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
     - 진수를 변경하는 방법

     - split

  1. 주어진 숫자 n을 k진수로 변환한다. 
  2. 이 숫자를 0을 기준으로 나눈다.
  3. 1과 공백을 제외한다.
  4. 소수를 판별해서 해당 숫자가 소수이면 개수를 세는 함수를 만든다.
  5. 3번에서 구한 숫자 배열을 소수 판별하는 함수로 넘겨준다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const findPrime = (numbers) => {
  let primeCount = 0;

  for (i = 0; i < numbers.length; i++) {
    let isNotPrime = false;
      for (j = 2; j <= Math.floor(Math.sqrt(numbers[i])); j++) {
        if (numbers[i] % j === 0) {
          isNotPrime = true;
        } 
      }
    if (isNotPrime === false) {
      primeCount += 1;
    }
  }
    return primeCount;
};

const solution = (n, k) => {
  const number = n.toString(k);
  const arr = number.split(0).filter(it => it !== '1' && it !== '');
  return findPrime(arr);
};

test('findPrime', () => {
  expect(solution(437674, 3)).toEqual(3);
  expect(solution(110011, 10)).toEqual(2);
});

 

 

 

댓글