문제 : boj14579
f(n)를 1부터 n까지를 합친 삼각수라고 하자. 그럼 f(a)*f(a+1)*...*f(b)의 값을 구하는 문제이다. b-a가 최악의 경우라도 999이므로, 일단 f(a)*f(a+1)*...*f(b) 자체는 O(999)로 가능하다. 그럼 f(a)만 빠르게 구할 수 있다면 문제없이 시간 내에 답을 구할 수 있다.
여러 방법이 있을 것인데, 사실 최대 f(1000)까지만 구할 수 있으면 되므로 매번 반복문을 통해 직접 구해줘도 시간내에 통과는 가능하다. 아니면 이하의 등차수열 합 공식을 사용해서 f(n)을 구해도 된다.
이하 코드는 일단 f(a)를 구한 후 거기에 a+1, a+2, ... ,b를 순차적으로 더하면서 곱해줬다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static final int MOD = 14579;
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int tmp = (a+1)*a/2;
tmp%=MOD;
int answer = tmp;
for (int i = a+1; i <= b; i++){
answer*=(tmp+=i);
answer%=MOD;
}
System.out.println(answer);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 23804 - 골뱅이 찍기 - ㄷ (boj java) (0) | 2022.05.23 |
---|---|
[자바] 백준 17271 - 리그 오브 레전설 (Small) (boj java) (0) | 2022.05.22 |
[자바] 백준 17212 - 달나라 토끼를 위한 구매대금 지불 도우미 (boj java) (0) | 2022.05.20 |
[자바] 백준 1897 - 토달기 (boj java) (0) | 2022.05.20 |
[자바] 백준 1010 - 다리 놓기 (boj java) (0) | 2022.05.20 |
댓글