본문 바로가기
Algorithm/programmers

[JS]programmers k진수에서 소수 개수 구하기

by 갈잃자 2022. 9. 27.

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

 

프로그래머스

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

programmers.co.kr


우선 자바스크립트를 자유자제로 구현하지 못하는 나는 js보다 조금 더 편한 python으로 문제를 풀고 구현을 해 나가는 식으로 풀었다. 

 

n진수로 바꾸고, 소수판별하는 식만 구현할 줄 안다면 충분히 쉽게 풀 수 있는문제지만, 진수변환과 소수판별을 처음 해보는 사람이라면 누구나 힘들 수 있는 문제로 느껴짐

 

function solution(n, k) {
  // 진수변환
  const convert = (n,k) => {
    var result = ''
    while (n >= k) {
      var m = n%k
      result = result + String(m)
      n = parseInt(n / k);
    }
    
    if (n > 0) {
      result = result + String(n)
    }
    return result.split('').reverse().join('')
  }

  // 소수 판별
  const check = (num) => {
    if (num <= 1) {
      return false
    }
    MAX = parseInt(num ** (0.5))
    for (var i =2; i<MAX+1; i++) {
      if (num % i ===0) {
        return false
      }
    }
    return true

  }
  
  var answer = 0;
  const string = convert(n,k)

  const arr = string.split('0')
  for (i = 0; i<arr.length; i++) {
    // 빈 배열을 빼주기 위함
    if (arr[i]) {

      if (check(parseInt(arr[i]))) {
        answer +=1
      }
    }
  }

  return answer;
}

문제를 풀면서 알게 된 js 코딩

 

  • parseInt(string, radix) : 정수를 숫자로 변환시키는 내장함수이다. string에 들어간 문자열을 radix진수로 읽어서 10진수로 표현해주는 내장함수이다. radix가 없다면 기본값은 10으로 잡혀져 있어서 10진수로 표현이 된다. 만약 string자리에 값이 정수로 표현하지 못하는 문자라면 NaN이 출력!
  • result.split('').reverse().join('') : 문자열을 한방에 뒤집을 수 있는 함수를 찾다가 발견한 코드 split('')으로 나누어 array로 변형한 뒤, reverse()를 사용하여 뒤집고, .join('')을 사용하여 값을 다시 string형태로 바꾸어준다!

댓글