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

2025. 5. 21. 19:28·코딩테스트/프로그래머스

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/136798?language=javascript

문제 풀이

문제의 핵심은 약수의 갯수를 얼마나 효율적으로 찾는가인다.

일반적으로 1 ~ number까지 for문을 돌면서 나누어 떨어지는 값을 약수로 구할 경우 O(n)의 시간복잡도가 걸린다. -> 시간초과

따라서 효율적으로 약수의 갯수를 찾는 방법은 다음과 같다.

1. 1 ~ number의 제곱근까지 number를 나누었을 때 0이 되는 값이 약수가된다.

2. 해당 값으로 number을 나눈 몫 또한 약수가된다.

3. 중요한 점은 1번에서 구한 값과 2번에서 구한 값의 중복이 발생할 수 있으므로 중복 제거를 해줘야한다. -> set 자료구조 이용

function cal(num) {
    let arr = new Set();
    // 제곱근의 값
    // 1. num의 제곱근 범위로 나머지가 0인 값 구하기
    let tmp = Math.sqrt(num);
    for (let i = 1; i <= tmp; i++) {
        if (num % i === 0) {
            arr.add(i);
            // 2. num을 위에서 구한 약수로 나누었을때 값 구하기
            arr.add(num / i);
        }
    }
    return arr.size;
}

function solution(number, limit, power) {
    let answer = [];
    for (let i = 1; i <= number; i++) {
        answer.push(cal(i));        
    }
    
    return answer.map(a => {
        if (a > limit) return power;
        return a;
    }).reduce((acc, cur) => acc += cur, 0);
}

결론

제곱근을 활용한 약수의 갯수를 구하는 방법으로 할 경우 문제를 해결 할 수 있다.

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

프로그래머스 프로세스  (0) 2025.06.04
프로그래머스 전화번호 목록  (0) 2025.06.04
프로그래머스 튜플  (0) 2025.04.26
프로그래머스 모의고사  (0) 2025.04.24
프로그래머스 [1차] 캐시  (0) 2025.04.24
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 프로세스
  • 프로그래머스 전화번호 목록
  • 프로그래머스 튜플
  • 프로그래머스 모의고사
의현
의현
개발은 즐거워
  • 의현
    UIHYEON BLOG
    의현
  • 전체
    오늘
    어제
    • 분류 전체보기 (116)
      • 프론트엔드 (47)
        • JavaScript (47)
        • TypeScript (0)
        • HTML (0)
        • CSS (0)
        • React (0)
      • 프로젝트 (2)
        • Task Flow (2)
      • 코딩테스트 (66)
        • Binary Search (2)
        • bfs (Breadth-first s.. (4)
        • dfs (Deapth-first se.. (1)
        • Greedy (1)
        • Dynamic Programming (1)
        • two pointer (4)
        • 구현 (2)
        • LIS(Longest Increasi.. (0)
        • 문자열 (3)
        • 자료구조 (4)
        • 비트마스크 (2)
        • 수학 (2)
        • 프로그래머스 (40)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
의현
프로그래머스 기사단원의 무기
상단으로

티스토리툴바