문제 풀기/C#
60. 기사단원의 무기
kagan-draca
2025. 2. 10. 14:14
기본 틀 :
using System;
public class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
return answer;
}
}
문제 내용은 엄청 길지만 핵심은 약수의 개수를 구해서
limit 개수 보다 크면 power를, 작으면 약수의 개수를
모두 더하라는 문제였다.
약수의 개수를 구하는 방법 중 좋은 방법은
Math.Sqrt()를 사용해 반복 횟수를 최대한 줄이는 방법이다.
이때, 9와 같이 몫과 나누고자 하는 수가 같은 경우 약수의 개수가
2개가 아닌 1개이므로 유의해주면 된다.
using System;
using static System.Math;
public class Solution {
public int solution(int number, int limit, int power) {
int need = 0;
for(int i = 1; i <= number;i++)
{
int count = 0;
for(int j = 1; j <= Math.Sqrt(i); j++)
{
if(i % j == 0)
{
count += i / j == j ? 1 : 2;
}
}
need += count > limit ? power : count;
}
return need;
}
}
문제를 해결하고 수행시간이 너무 큰 경우가 존재해서 다른 사람들의 풀이를 보면서
더 짧은 수행시간을 수행하는 코드가 존재하는지 확인 했으나
대부분의 코드가 유사한 수행시간이나 더 큰 수행시간을 요구했다.
아마도, number가 100000 같이 큰 수가 입력될 경우 많은 수행시간을 요구하는 것으로 파악된다.