티스토리 뷰
시간 초과된 나의 코드
package boj;
import java.util.Scanner;
public class BOJ_17427 {
public static int printYaksuSum(int i){
int yaksuSum = 0; //print약수가 호출될때마다 초기화해주어야한다
for(int t=1;t<=i;t++) {
if(i%t==0) {
yaksuSum+=t;
}
else {
continue;
}
}
return yaksuSum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum=0;
for(int i=1;i<=n;i++) {
sum+= printYaksuSum(i);
}
System.out.println(sum);
}
}
해결하기
7이하의 약수
1 - 1 | 2 - 1,2 | 3-1,3 | 4-1,2,4 | 5-1,5 | 6-1,2,3,6 | 7-1,7 |
1의 개수 : 7개
2의 개수 : 7/2 = 3개
3의 개수 : 7/3 = 2개
4의 개수 : 7/4 = 1개
5의 개수 : 7/5 =1개
6의개수 : 7/6 =1개
7의 개수 : 7/7 =1개
이 규칙을 알면 쉽게 풀린다~!
package boj;
import java.util.Scanner;
public class BOJ_17427Re {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long sum=0;
for(int i=1;i<=n;i++) {
int count = n/i;
sum += (long) count * i;
}
System.out.println(sum);
}
}