알고리즘

[프로그래머스] 기사단원의 무기

예림밈 2025. 12. 23. 13:59
728x90

문제 : 기사단원의 수를 나타내는 정수 number와 이웃나라와 협약으로 정해진 공격력의 제한수치를 나타내는 정수 limit와 제한수치를 초과한 기사가 사용할 무기의 공격력을 나타내는 정수 power가 주어졌을 때, 무기점의 주인이 무기를 모두 만들기 위해 필요한 철의 무게를 return 하는 solution 함수를 완성하시오.

 

풀이: 약수 구하는 단순한 문제 같은데, 시간 초과를 고려해야 한다. 

 

1차 코드 : 약수 구할 때 시간 초과 발생!

class Solution {
    public int solution(int number, int limit, int power) {
        int answer = 0;
        for(int i=1; i<=number; i++){
            int sum=0;
            for(int j=1; j<=i; j++){ 
                if (i%j==0){
                    sum+=1; 
                }
            }
            if(sum>limit){
                sum=power;
            }
            answer+=sum;
        }
        return answer;
    }
}

 

2차 코드 : 에라토스테네스의 체 방식 활용 (소수를 판별하는 알고리즘)

[방식]

1. 배열 초기화

2. 1부터 시작해서 배수에 해당하는 수를 모두 지움 (자기 자신은 지우지x)

- 원래는 소수 판별하기 위해서는 1은 소수,합성수가 아니기에 2부터 시작하지만 해당 문제는 약수이므로 1도 포함! 

3. 약수 개수가 limit을 초과하면 power 숫자로 대체, 그렇지 않다면 약수 개수 만큼 더하기 

class Solution {
    public int solution(int number, int limit, int power) {
        int[] divisors = new int[number+1];
        
        for(int i=1; i<=number; i++){
            for(int j=i; j<=number; j+=i){
                divisors[j]++; // 해당 수의 배수는 약수에 포함되므로 더해줌
            }
        }
        
        int answer=0;
        for(int i=1; i<=number; i++){
            if(divisors[i] > limit){
                answer+=power;
            } else{
                answer+=divisors[i];
            }
        }
        return answer;
    }
}

 


문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/136798

728x90

'알고리즘' 카테고리의 다른 글

[프로그래머스] 광물 캐기  (0) 2026.01.02
[프로그래머스] 요격 시스템  (0) 2025.12.24
[프로그래머스] 추억 점수  (0) 2025.12.22
[백준]- 2225번  (0) 2025.05.17
[Softeer] - 우물 안 개구리  (2) 2025.04.25