https://school.programmers.co.kr/learn/courses/30/lessons/136798
n의 약수를 구해 이 값이 limit보다 크면 power 값으로 대치하면 해결할 수 있다.
단, 약수를 구할 때 n까지 구하게 된다면 최대 값을 때 시간 초과가 발생할 수 있다.
따라서 n을 2로 나눠서 구해야한다.
2를 나눠도 올바른 약수의 개수가 구해지는 이유
24 / 2 = 12
12의 약수 : 1 2 3 4 6 12 -> 6
24의 약수 : 1 2 3 4 6 8 12 24 -> 8
즉, 24의 절반 횟수만큼 돌려도 약수는 1 2 3 4 6 8 12까지 구해진다.
마지막에 1을 증가시키면 24의 약수를 구할 수 있는 것
#include <string>
#include <vector>
using namespace std;
int calc(int n){
int num = 0;
for(int i = 1;i<=n/2;i++){
if(n % i ==0)
num++;
}
return num + 1;
}
int solution(int number, int limit, int power) {
int answer = 0;
for(int i = 1;i<=number;i++){
int sword = calc(i);
if(sword > limit)
sword = power;
answer += sword;
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 1] 둘만의 암호 (0) | 2024.06.08 |
---|---|
[Lv 1] 문자열 나누기 (0) | 2024.06.08 |
[Lv 1] 햄버거 만들기 (0) | 2024.06.08 |
[Lv 1] 옹알이 (2) (0) | 2024.06.08 |
[Lv 1] 콜라 문제 (0) | 2024.06.07 |