프로그래머스 기사단원의 무기 자바스크립트

버건디·2023년 6월 24일
0

프로그래머스

목록 보기
51/66
post-thumbnail

문제 링크


- 내 풀이

function solution(number, limit, power) {
  let result = 0;
  let numArr = [];

  for (let i = 1; i <= number; i++) {
    let num = i;
    let count = 0;

    for (let j = 1; j <= Math.sqrt(num); j++) {
      if (num % j === 0) {
        if (num / j === j) {
          count++;
        } else {
          count += 2;
        }
      }
    }
    numArr.push(count);
  }

  for (let i = 0; i < number; i++) {
    if (numArr[i] > limit) {
      numArr[i] = power;
    }
  }

  return numArr.reduce((a, b) => a + b, 0);
}

단순히 이중반복문을 한다면 시간초과 오류가 난다.

약수 갯수는 제곱근까지만 범위를 설정해주면 시간복잡도를 줄일수 있다.

예를 들어서 number 가 9라면, 약수는 총 1 3 9인데 3까지만 범위를 설정해주고

만약에 9 / 3 === 3 이라면 제곱근이므로 count는 한개만 더해주고 그게 아니라면 count를 2개를 더해준다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보