Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- java 반올림
- java
- 백준 16935
- 백준 16927
- 백준 15661
- sort
- 백준 4375
- 백준 14391
- 알고리즘
- 프로그래머스 도둑질 java
- 코딩테스트
- Math.floor()
- 프로그래머스 옹알이 java
- java 올림
- 백준 17425
- 백준 11723
- 프로그래머스 숫자의 표현 java
- Algorithm
- 0으로 채우기
- java 내림
- 자바
- 프로그래머스 연속된 수의 합 java
- 네트워크
- Math.ceil()
- 프로그래머스 네트워크 java
- 백준 18290
- Arrays
- time complexity
- Codility
- mysql
Archives
- Today
- Total
취미처럼
[백준] 17425번 약수의 합 본문
https://www.acmicpc.net/problem/17425
17425번: 약수의 합
두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더
www.acmicpc.net
테스트 케이스마다 출력하는 문제
시간초과가 발생한다.
그래서 미리 모든 경우의 수를 구해 저장해서 해당 값을 출력만 하는 방식으로 풀어야 한다.
코테 경험이 없어 실제로 이런 방식으로 출제되는지 궁금하다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int count = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
long fx[] = new long[1000001]; // 해당 자연수의 모든 약수를 더한 변수
long gn[] = new long[1000001]; // 해당 자연수 이하의 모든 fx값을 더한 변수
// 1은 모든 자연수의 약수이므로 전체 배열에 채워줌
Arrays.fill(fx, 1);
// i * j = x 일 때 i, j 는 x 의 약수이다.
// i * j까지만 반복한다. 2 * 500,000 = 1,000,000
for(int i=2; i<fx.length; i++) {
for(int j=1; i*j <fx.length; j++) {
fx[i*j] += i;
}
}
for(int i = 1; i < gn.length; i++) {
gn[i] = gn[i-1] + fx[i];
}
while(count-- > 0) {
int input = Integer.parseInt(br.readLine());
sb.append(gn[input]).append("\n");
}
System.out.println(sb);
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1978번 소수 찾기 (0) | 2021.02.25 |
---|---|
[백준] 2609번 최대공약수와 최소공배수 (0) | 2021.02.25 |
[백준] 17427번 약수의 합 2 (0) | 2021.02.25 |
[백준] 1037번 약수 (0) | 2021.02.08 |
[백준] 4375번 1 (0) | 2021.02.08 |
Comments