My First Programming

프로그래머스 기사단원의 무기 javascript

2022-11-225 분 소요
/images/thumbnail/프로그래머스.jpg

🖇️프로그래머스

풀이

1~number까지 for문으로 순회하면서,

소수 개수를 구해주는 문제입니다.

소수 개수가 limit 이상이면 power로 대체하여 더해줍니다.

아래는 소수를 구할때 1 ~ (number / 2)를 기준으로 구해준 경우 입니다. 1~number까지 for문으로 순회하면서,

소수 개수를 구해주는 문제입니다.

소수 개수가 limit 이상이면 power로 대체하여 더해줍니다.

효율을 좋게하려면 sqrt를 사용해야 합니다.

A 곱하기 B의 경우, A만 구해도 B를 구할 수 있습니다.

예를들어 16인 경우 소수는 1, 2, 4, 8, 16 입니다.

1 * 16 = 16

2 * 8 = 16

4 * 4 = 16

마지막 4 * 4 인 경우 숫자는 4 하나 뿐이므로 예외가 됩니다

이때만 if 문으로 아래처럼 예외 처리를 해주면 됩니다.

if (i ** 2 === value) cnt++;
else cnt += 2;

코드

function solution(number, limit, power) {
  const check = (value) => {
    let cnt = 0;
    if (value === 1) return 1;
    for (let i = 1; i <= Math.sqrt(value); i++) {
      if (value % i === 0) {
        if (i ** 2 === value) cnt++;
        else cnt += 2;
      }
    }
    return cnt;
  };
  let answer = 0;
  for (let i = 1; i <= number; i++) {
    const res = check(i);
    answer += res > limit ? power : res;
  }
  return answer;
}
Remy Sharp

JSC

새로운 기술 익히는게 재밌는 사람 😊