문제 풀기/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 같이 큰 수가 입력될 경우 많은 수행시간을 요구하는 것으로 파악된다.

'문제 풀기 > 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