기사단원의 무기

Seongjin Jo·2023년 2월 28일
0

프로그래머스 LV1

목록 보기
22/31

문제

풀이

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

처음에 그냥 2중 for문으로 해봤는데 안풀렸다. 시간초과. 그래서 약수를 구하는 텀을 줄여야겠다 싶어서 절반만 약수를 구하고 +2를 해준다. 만약에 j*j 가 같으면 +1만 해준다.

0개의 댓글