https://www.acmicpc.net/problem/17427
1. 아이디어
문제의 설명대로 1부터 N까지 각 자연수의 약수의 합을 구하고 이를 다시 더하는 방식으로는 시간안에 해결할 수 없다. 반대로 1부터 N까지의 수가 g(N)에 몇 번 등장할지를 찾으면 간단하게 해결할 수 있는데 1은 1부터 N까지 1의 배수의 수만큼 등장하고 2는 2의 배수의 수만큼 등장하고 3은 3의 배수의 수만큼 등장한다. 이를 활용하면 간단하게 해결할 수 있다.
2. 문제풀이
배수는 나눗셈 연산으로 구할 수 있고 등장한 수의 합을 구하기 위해 해당 수를 곱하는 과정을 반복하면 간단하게 해결할 수 있다. g(N)을 구하는 과정에서 int형 오버플로우가 발생할 수 있음에 주의해야한다.
3. 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
long N = Long.parseLong(br.readLine());
long sum = 0;
for (int i = 1; i <= N; i++) {
sum += N / i * i;
}
System.out.println(sum);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1931번 - 회의실 배정 [Java] (0) | 2025.02.06 |
---|---|
[백준] 1193번 - 분수찾기 [Java] (0) | 2025.02.06 |
[백준] 1991번 - 트리 순회 [Java] (0) | 2025.02.06 |
[백준] 1316번 - 그룹 단어 체커 [Java] (0) | 2025.02.06 |
[백준] 5622번 - 다이얼 [Java] (0) | 2025.02.06 |