배열의 구간합을 구하는 문제로 2번이나 시간초과로 실패 되었다. 이유는 1. Scanner 사용 2. 배열을 모두 순회하는 for 문 사용 이었는데 코드는 아래와 같다.
더보기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //n개 5
int m = sc.nextInt(); //m번 3
int number [] = new int[n];
for (int i = 0; i < number.length; i ++) {
number [i] = sc.nextInt(); // 5 4 3 2 1
}
for (int i = 0; i < m; i ++) {
int count = 0 ;
int f = sc.nextInt(); //1
int l = sc.nextInt(); //3
int a = (l - f) + 1 ; // 3
if (a != 1 ) {
for ( int j = f ; j < l +1 ; j++) {
count += number[(j -1)];
}
System.out.println(count);
} else {
System.out.println(number[(f-1)]);
}
}
}
}
[개선]
그리고 나서 개선 된 것이 구간합이라는 것을 사용하여 배열을 애초에 꾸리는 방법이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import java.util.StringTokenizer;
public class algo_11659 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // n개 5
int m = Integer.parseInt(st.nextToken()); // m번 3
int number[] = new int[n + 1]; // 6개의 방을 가진 배열
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= n; i++) {
number[i] = number[i - 1] + Integer.parseInt(st.nextToken()); // 5 4 3 2 1
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int f = Integer.parseInt(st.nextToken()); // 1
int l = Integer.parseInt(st.nextToken()); // 3
int sum = number[l] - number[f - 1];
bw.write(sum + "\n");
}
bw.flush();
br.close();
bw.close();
}
}
'알고리즘' 카테고리의 다른 글
O(n) 투 포인터 (0) | 2024.12.09 |
---|---|
구간 합 (1) | 2024.12.06 |
백준 - 1546 (평균) (0) | 2024.12.02 |
17362 - 수학은 체육과목 입니다 2 (0) | 2024.11.22 |
백준 11945 뜨거운 붕어빵 (feat.런타임 에러) (0) | 2024.11.18 |