https://www.acmicpc.net/problem/17425

 

이어서 ~ 

이전의 약수의 합2에서 다음문제인 약수의 합1...

왜 문제집에서 순서를 반대로 푸나 했는데 막상 풀어보니 아 이래서 그랬구나 했다

약수의 합 2에서 미리 약수의 합값을 전부 계산해둔다음 필요한 부분을 더해서 출력하는 과정을 거쳤는데

이번 1은 그걸 더 반복적으로 요구한다

 

아무생각없이 그냥 2의 소스를 그대로 복붙해서 입력 받는 부분만 바꿨더니 바로 시간초과...

아차! 매 입력마다 약수합부분을 새로 구하는구나 해서 해당부분을 분리 ~ 시간초과...

fx값을 누적값은 중간까지 바뀌지않으니 괜히 처음부터 하면 안되는구나 싶어서 또 해당 부분을 분리 ...

뭐 이런 과정을 거쳐서 아래 소스

#include <stdio.h>
/**
 q17425 약수의합
 */


#define MAX 1000000

long long f[MAX + 1];
long long g[MAX + 1];

long long solution(long n) {
    // f[1] ~ f[n] 까지의 합
    long long g = 0;
    for (int i = 1; i <= n; i++) {
        g += f[i];
    }
    return g;
}

void setupEratos(long max) {
    // 각 i의 배수들의 합을 f배열에 저장
    for (int i = 1; i <= max; i ++) {
        for (int j = i; j <= max; j += i) {
            f[j] += i;
        }
    }
}

void setupSumArray(long max) {
    // g값을 미리 전부 계산
    for (int i = 1; i <= max; i++) {
        g[i] = g[i - 1] + f[i];
    }
}

int main(int argc, const char * argv[]) {
    long t;
    
    while (scanf("%ld", &t) == 1) {
        long nValues[100000] = {0};
        long max = 0;
        
        for (int i = 0; i < t; i ++) {
            scanf("%ld", &nValues[i]);
            if (nValues[i] > max) {
                max = nValues[i];
            }
        }
        
        // fx값 미리계산
        setupEratos(max);
        
        // gx값 미리계산
        setupSumArray(max);
        
        // 결과 출력
        for (int i = 0; i < t; i ++)
            printf("%lld\n", g[nValues[i]]);
    }
    
    return 0;
}

솔루션은... 저렇게 빼는게 오히려 이상해보이는데 

약수의 합2의 소스의 흔적이다;;

통과하니 괜히 바꾸기 귀찮

 


https://github.com/wiwi-git/c-baekjoon

 

GitHub - wiwi-git/c-baekjoon: 블로그 업데이트용 백준 코드

블로그 업데이트용 백준 코드. Contribute to wiwi-git/c-baekjoon development by creating an account on GitHub.

github.com

 

 

반응형

'C,C++' 카테고리의 다른 글

[C]백준 Q.6588 골드바흐의 추측  (0) 2026.01.03
[C]백준 Q.2609,1978,1929 최대공약수 ~ 소수 문제  (0) 2025.12.18
[C]백준 Q.17427 약수의 합 2  (0) 2025.12.13
[C]백준 Q.1037 약수  (0) 2025.12.12
[C]백준 Q.4375 1  (0) 2025.12.11

+ Recent posts