언젠가는 펼쳐 볼 아카이브
[Programmers] 기사단원의 무기 본문
사용 언어 : javascript
lv.1
#문제
#첫번째 제출코드
function solution(number, limit, power) {
let answer = 0;
let list = [];
for(let i=1; i<=number; i++){
let count = 0;
if(i === 1){
list.push(1)
}else{
for(let j=1; j<=i; j++){
if(i%j === 0){
count++;
}
}
list.push(count);
}
}
list.map(item => {
if(item <= limit){
answer += item;
}else {
answer += power;
}
})
return answer;
}
테스트 케이스는 통과했으나, 실제 코드 제출을 하면 시간 초과로 문제를 풀지 못했다. 아무래도 for문을 중첩을 써서 그런것 같은데.. 약수를 구하는 코드를 줄일 수 없나 고민해봤지만.. 떠오르는 것들로는 죄다 중접뿐이라 어쩔수 없이 검색으로 찾아봤다.
그랬더니.. 제곱근 함수 "sqrt()"를 통해 구하는 방법을 알게 됐다.
#최종 제출코드
function solution(number, limit, power) {
let answer = 0;
for(let i=1; i<=number; i++){
let count = 0;
for(let j=1; j<=Math.sqrt(i); j++){
if(i%j === 0){
if(Math.pow(j,2) === i){
count+=1;
}else{
count+=2;
}
}
}
if(count <= limit){
answer+= count;
}else{
answer+=power;
}
}
return answer;
}
제곱근으로 약수를 구할 경우, 들어오는 숫자가 9일 때, 약수는 [1, 3, 3, 9]로 3이 중복되어서 나오기 때문에 "pow()" 함수를 이용하여 중복을 제거해줘야했다..!
#참고
'IT > Programmers' 카테고리의 다른 글
[Programmers] 추억 점수 (0) | 2024.02.29 |
---|---|
[Programmers] 카드뭉치 (0) | 2024.02.29 |
[Programmers] 가장 가까운 글자 (0) | 2024.02.28 |
[Programmers] 대충 만든 자판 (0) | 2024.02.28 |
[Programmers] 조건에 맞게 수열 반환하기 2 (0) | 2024.02.21 |