언젠가는 펼쳐 볼 아카이브

[Programmers] 기사단원의 무기 본문

IT/Programmers

[Programmers] 기사단원의 무기

개발자희망생고롸파덕 2024. 2. 28. 16:02

사용 언어 : 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()" 함수를 이용하여 중복을 제거해줘야했다..!

 

 

 

#참고

https://velog.io/@woody_/JS-%EC%95%BD%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

'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