seunghyun Note

기사단원의 무기 with JS 본문

코딩테스트/프로그래머스

기사단원의 무기 with JS

승숭슝현 2024. 2. 8. 10:13
728x90
반응형

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

deep dive

풀이 로직을 완벽히 이해하고 풀었다.

- 약수를 통한 간단한 알고리즘이였고 시간복잡도를 최대한 고려해보려고 하다가 O(N^2)으로 구성해봤다.

- js문법인 map과 forEach 를 통해 순회를 시키고 function을 만들어 캡슐화를 시켰다.

- 따로 예외케이스는 없었다.

예외처리 : x

특이점 : 약수를 구할 때 자기 자신을 제외하고 number/2로 사용해서 시간을 줄여야한다.


 

function solution(number, limit, power) {

  var arr = [];
  for (let i = 1; i <= number; i++) {
  //divisor function에서 가져온 cnt값을 push를 해준다.
    arr.push(divisor(i));
  }
  
  //map을 통해 x가 limit보다 크다면 Power를 return을 해준다.
  const arr1 = arr.map((x) => {
    return x > limit ? power : x;
  });

//최종 힘의 크기를 더해서 구해준다.
  let sum = 0;
  arr1.forEach((element) => {
    sum += element;
  });
  return sum;
}

//약수를 구한다.
//약수를 구할 때 자기 자신에서 2를 나눠서 실행한다.
function divisor(number) {
  let cnt = 1;
  for (let i = 1; i <= number / 2; i++) {
    if (number % i === 0) cnt++;
  }
  return cnt;
}

 

 

728x90
반응형