난이도: Lv. 2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/92335
알고리즘
1. n을 k진수로 변환한다.
2. 시작 인덱스를 0으로 초기화하고, 1.의 문자열을 순회하며 0을 만나면 시작 인덱스부터 0 전까지의 문자열을 복사해서 배열에 넣는다. 0을 만났을 때 다음 시작 인덱스는 0 다음 인덱스다. for문이 끝났을 때 시작 인덱스부터 마지막 문자까지의 문자열은 배열에 넣지 않은 상태이므로 배열에 넣어준다.
3. 배열의 각 원소에 대해 소수인지 확인한다.
코드
function isPrime(num) {
if (num === '1' || num === '') { return false; }
num = Number(num);
const endLoop = Math.floor(Math.sqrt(num));
for (let i = 2; i <= endLoop; i++) {
if (num % i === 0) { return false; }
}
return true;
}
function solution(n, k) {
var answer = 0;
const kFormation = n.toString(k);
const strArr = [];
let startIdx = 0;
for (let i = 0; i < kFormation.length; i++) {
if (kFormation[i] === '0') {
strArr.push(kFormation.substring(startIdx, i));
startIdx = i + 1;
}
}
strArr.push(kFormation.substring(startIdx, kFormation.length));
strArr.forEach((num) => { answer += isPrime(num) })
return answer;
}
주저리
문자열 어떻게 잘라야할지 감이 안잡혀서 당황하다가 막상 코드 짜보니까 문자열 자르는 건 쉬웠다. 첫트에는 소수인지 구분하는 함수를 잘못썼다. 나머지 연산해야되는데 그냥 나누기를 하는 바보같은 짓을 했다. 근데 예시 테스트케이스는 다 통과했다는게 유머다. 아무튼 2트랑 3트에는 for문 끝나고 배열에 문자열 추가하는 부분에서 빈 문자열이나 '1'이 들어가는 경우에 대해 예외처리를 안해줘서 틀렸다. solution 함수에서 작성했더니 지저분해져서 isPrime 함수에 예외 처리해줬더니 코드도 조금은 깔끔해졌다.
'코딩테스트' 카테고리의 다른 글
[JS] [3차] n진수 게임 (0) | 2023.12.27 |
---|---|
[JS] [3차] 압축 (0) | 2023.12.26 |
[JS] 타겟 넘버 (1) | 2023.12.22 |
[JS] 전화번호 목록 (1) | 2023.12.21 |
[JS] [1차] 뉴스 클러스터링 (1) | 2023.12.20 |