기본 틀 :
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 같이 큰 수가 입력될 경우 많은 수행시간을 요구하는 것으로 파악된다.
'문제 풀기 > C#' 카테고리의 다른 글
62. 옹알이 (2) (정규식) (0) | 2025.02.11 |
---|---|
61. (중요)로또의 최고 순위와 최저 순위(Intersect, Union, Except) (0) | 2025.02.10 |
59. 덧칠하기 (0) | 2025.02.07 |
58. 소수 만들기 (0) | 2025.02.07 |
57. 모의고사 (0) | 2025.02.07 |