[알고리즘][X] [Professional] 구간 합
2024. 4. 2. 10:07ㆍ알고리즘 풀이/Java
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXGGNB6cnEDFAUo&
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Solution {
static StringBuilder sb = new StringBuilder();
static HashMap<Long, Long> dp = new HashMap<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for (int testCase = 1; testCase <= T; testCase++) {
st = new StringTokenizer(br.readLine());
long A = Long.parseLong(st.nextToken());
long B = Long.parseLong(st.nextToken());
long sum = 0;
for (long i = 0; i < 10; i++) {
sum += i;
dp.put(i, sum);
}
long a = accSum(A-1);
long b = accSum(B);
sb.append("#").append(testCase).append(" ").append(b-a).append("\n");
}
System.out.println(sb);
}
private static long accSum(long n) {
if (dp.containsKey(n)) {
return dp.get(n);
}
if (n < 10) {
return n * (n+1) / 2;
}
String s = String.valueOf(n);
long v = (long) Math.pow(10, s.length()-1);
long num = accSum(n - 1 - n % v) + n / v * (n % v + 1) + accSum(n % v);
dp.put(n, num);
return num;
}
}
나의 풀이
- 식을 활용해서 풀면 된다.
- 다만 StackOverflow 문제가 터졌는데 long으로 하지 않아서 + v를 int로 형변환해주어서 였다.
- 주의하자!!!!
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘] 싸움땅 (0) | 2024.04.02 |
---|---|
[알고리즘][X] 산타의 선물 공장 (0) | 2024.04.02 |
[알고리즘] 산타의 선물 공장 2 (0) | 2024.04.01 |
[알고리즘] [Professional] 조합 (0) | 2024.04.01 |
[알고리즘][X] 코드트리 빵 (0) | 2024.03.30 |