Tech is created to fix problem

[프로그래머스 Lv.1] 기사단원의 무기 약수 구하기 for 문 본문

알고리즘

[프로그래머스 Lv.1] 기사단원의 무기 약수 구하기 for 문

furaha 2023. 9. 3. 11:37
반응형

1. 문제

 

2. 생각흐름

1) 1부터 number 까지 각각의 수가 가진 약수의 갯수를 구하자 --> 약수를 구하는 함수를 하나 만들기

2) 그 갯수들을 다 더하되, for 문을 돌면서 limit 이 넘는 수가 있다면 power 로 대체해서 더하기

 

*문제를 풀 때, 약수나 소수가 나오면 즉 수학 개념이 나오면 거기서부터는 막힌다,, 꼭 검색을 해야하는ㅜ

 

3. 풀이

// n 수의 약수들을 배열로 만들어주는 함수
function findDivisors(n) {
  const divisors = [];
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      divisors.push(i);
    }
  }
  return divisors;
}

function solution(number, limit, power) {
   let result = 0;
    for (let i = 1; i <= number; i++) {
      const divisors = findDivisors(i).length;
      if(divisors <= limit){
       result += divisors
      } else {
      result += power
      }
    }
   return result;
}


solution(5,3,2)

1) 약수를 구하는 함수는 n이라는 숫자를 1부터 자기 자신까지 나눴을 때 나누어 떨어지는 숫자를 divisors 배열에 넣어준다

2) solution 함수에서 number 들을 순회하면서 약수의 갯수를 result 에 계속 누적해서 담는다

 

4. 알게 된 점

let result 를 함수 바깥에 전역변수로 선언했는데, 함수 내부에서만 사용하기 때문에 지역변수로 바꿔주었다.

그리고 solution 함수에서 for 문까지 작성을 했는데 return 값을 주지 않았다. 문제풀이에서 답을 리턴해야 하기 때문에 리턴값을 추가했다.

 

반응형