안녕 세상아,

[프로그래머스/c++] Lv1 기사단원의 무기 본문

프로그래머스

[프로그래머스/c++] Lv1 기사단원의 무기

돈 많은 백수가 되고싶다 2024. 10. 9. 16:01

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

 

프로그래머스

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

programmers.co.kr

1. 약수 갯수 구하는 함수 만든다. 

2. 전체적으로 다 구하면 시간초과가 나기 때문에 루트로 나눠서 구한다. 

3. 만약 12의 약수를 구하면 1*12, 2*6, 3*4 이렇게 나온다. 이런식으로 하나만 구하면 다른 쪽은 세트가 되어서 9의 약수 중 3*3 이런 경우가 아니라면 k++를 해준다. 

4. 그런 후 limit보다 클 때와 작을 때를 나눠서 answer에 더해주면 된다.  

#include <string>
#include <vector>

using namespace std;

//우선 약수의 갯수 구하는 함수 만들기 
int cnt(int n) {
    int k = 0;
    for (int i = 1; i * i <= n; i++) {
        if (n % i == 0) {
            k++;
            if (i != n / i)
                k++;
        }
    }
    return k;
}

int solution(int number, int limit, int power) {
    int answer = 0;

    for (int i = 1; i <= number; i++) {
        int num = cnt(i);

        if (num > limit) {
            answer += power;
        }
        else
            answer += num;
    }

    return answer;
}