Don't be afraid of challenges
[프로그래머스] Lv.1 기사단원의 무기 - js 본문
https://school.programmers.co.kr/learn/courses/30/lessons/136798
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

나의 풀이 (1)
function solution(number, limit, power) {
let arr = new Array(number).fill(1).map((v,i)=> i+1).map((s,j)=>{
let temp = [];
for(let j =1; j<=s; j++){
if(s % j==0)temp.push(j)
}
return temp.length <= limit ? temp.length : power
});
let count =0;
arr.forEach((s)=> count += s);
return count;
}
이렇게 했더니 시간초과가 나왔다 !!!! 왜그런가 하니 안에서 약수를 구하는 과정에서 사용한 for문 때문에 시간복잡도가 최악으로 나온것같았다. 어떻게 해야하지 ...했다

카즈처럼 생각을 그만두고 싶었지만...
내가 알고있는 js 문법을 머리속에섯 총집합해서 다시 풀어보았다
나의 풀이 (2)
function solution(number, limit, power) {
let count = 0;
let arr = new Array(number).fill(1).map((v,i)=> i+1).map((s,j)=>{
let temp =0;
for(let j =1; j<=Math.sqrt(s); j++){
if(s % j==0) temp += s / j == j ? 1 : 2;
}
return temp <= limit ? temp : power
}).forEach((s)=> count += s);
return count;
}
모르겠고 구글링해보니까 Math.sqrt() 제곱근 메소드를 사용하라고 했다.
확실히 이 메소드를 사용하니까 바로 통과가 되었는데 sqrt함수를 이렇게 사용할 수 있는지도 몰라서 되게 신기했다.
약수 개수를 구하는 문제를 더 풀어본다거나 다음에도 더 도전해봐야겠다
'이것이 코딩테스트다' 카테고리의 다른 글
| [프로그래머스] Lv.1 나머지가 1이 되는 수 찾기 -js (0) | 2024.04.14 |
|---|---|
| [프로그래머스] Lv.1 소수 찾기 (진행중) -js (0) | 2024.04.14 |
| [프로그래머스] Lv.1 삼총사 -js (1) | 2024.04.14 |
| [프로그래머스] Lv.1 3진법 뒤집기 -js (0) | 2024.04.14 |
| [프로그래머스] Lv.1 수박수박수박수? -js (0) | 2024.04.14 |