Jam's story

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

코딩테스트/프로그래머스

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

애플쩀 2022. 12. 29. 16:21

이렇게푸니 제출에서 시간초과됨

   public static  int solution(int number, int limit, int power) {
        int answer = 0;

        int[] sosu=new int[number+1];
        for (int i = 1; i <= number; i++) {   	
			for (int j = 1; j <=i; j++) {
			
					if(i%j==0) { 
						sosu[i]++;			
					} 

			}//for-j
			if(sosu[i]>limit) {sosu[i]=power;}
			answer+=sosu[i];
		} //for-i

        return answer;
    }

 

약수구하는 부분에서 시간초과가 난 것 같다.

 

하나의 약수를 알면, number/i =j   또다른 약수 j 를 알 수 있다
package lv01;

import java.util.Iterator;

public class 기사단원의무기 {
	//number를 for문으로 1<=x<=number까지 모든 수를 약수갯수세기 
	//limit 넘는게 있다면 그것은 power로 대체 
	//모든 값을 더해서 result 반환 
	public static  int solution(int number, int limit, int power) {
		int answer = 0;

		for (int i = 1; i <= number; i++) {   	
			//약수세주는것을 숫자마다 초기화 해줘야 하니까 
			int count=0;
			for (int j = 1; j *j<=i; j++) {
				if(j*j==i) { 
					count++;
				} else if(i%j==0){
					count+=2;
				}

			}//for-j
			//i문이 끝나기 전에 answer에 해당값을 더해준다. 
			answer+= count>limit? power: count;
		} //for-i
		System.out.println(answer);
		return answer;
	}
	public static void main(String[] args) {
		solution(5,3,2);
		solution(10,3,2);
	}
}
Comments