반응형
https://www.acmicpc.net/problem/11659
* 문제는 해당 게시물 참고바랍니다.
해당 문제는 누적합을 구하는 문제입니다.
근데 그냥 풀면 시간 초과가 나옵니다.
수 많은 시행 착오를 겪었습니다.
해당 문제를 해결한 코드에 대해 설명하겠습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
public static int[]arr;
public static int[]sum;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[n];
sum = new int[n];
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
int tmp =0;
arr[i] = Integer.parseInt(st.nextToken());
for(int j=0; j<i+1; j++){
tmp += arr[j];
}
sum[i] = tmp;
}
for(int i=0; i<m; i++){
st = new StringTokenizer(br.readLine());
int input1 = Integer.parseInt(st.nextToken());
int input2 = Integer.parseInt(st.nextToken());
sb.append(sum[input2 - 1] - sum[input1 - 1] + arr[input1 -1] + "\n");
}
System.out.println(sb);
}
}
scanner는 시간을 엄청 잡아 먹기 때문에 이번에 StringTokenizer에 대해 배우게 되었습니다.
StringTokenizer st = new StringTokenizer(br.readLine());
StringTokenizer 클래스의 객체를 생성하여 StringTokenizer를 사용합니다.
StringTokenizer의 경우 공백이 있는 문자열을 말 그대로 token화 하여 가져옵니다.
또한 readLine을 이용하여 라인 단위로 읽습니다.
int n = Integer.parseInt(st.nextToken());
해당 코드와 같이 integer값을 읽기 위해서는 tokenizer는 기본적으로 string으로 읽어오기 때문에 형변환을 해줘야 합니다.
줄이 바뀐다면
st = new StringTokenizer(br.readLine());
해당 코드를 사용해야지만 정상적으로 읽어옵니다.
반응형
'백준' 카테고리의 다른 글
그래프 이론과 알고리즘 개념정리 (0) | 2023.10.02 |
---|---|
[백준][JAVA]색종이 만들기(2630번) - 분할 정복 (0) | 2023.08.20 |
[백준][JAVA]회의실배정(1931번) - 그리디 알고리즘 (0) | 2023.08.19 |
[백준][JAVA]평범한 배낭(12865번) - 다이나믹 프로그래밍, 배낭 문제 (0) | 2023.08.16 |
[백준][JAVA]스타트와 링크(14889번) - 백트래킹 algorithm 그리고 재귀의 이해 (0) | 2023.08.15 |