백준 11659번
https://www.acmicpc.net/problem/11659
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
list.add(0, 0);
for(int i=1; i<=N; i++) {
list.add(list.get(i-1) + Integer.parseInt(st.nextToken()));
}
각 입력받는 숫자의 누적합을 미리 계산
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
sb.append(list.get(num2) - list.get(num-1)).append('\n');
}
각 구간의 합은 list
에서 list(num2)
- list(num - 1)
의 값과 같다
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; StringBuilder sb = new StringBuilder(); st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); List<Integer> list = new ArrayList<>(); st = new StringTokenizer(br.readLine()); list.add(0, 0); for(int i=1; i<=N; i++) { list.add(list.get(i-1) + Integer.parseInt(st.nextToken())); } for(int i=0; i<M; i++) { st = new StringTokenizer(br.readLine()); int num = Integer.parseInt(st.nextToken()); int num2 = Integer.parseInt(st.nextToken()); sb.append(list.get(num2) - list.get(num-1)).append('\n'); } System.out.println(sb); } // End of main } // End of Main class
import java.util.* import java.io.* fun main() { val br = BufferedReader( InputStreamReader(System.`in`) ) var st: StringTokenizer var sb = StringBuilder() st = StringTokenizer(br.readLine()) var N = st.nextToken().toInt() var M = st.nextToken().toInt() var list : MutableList<Int> = ArrayList() list.add(0, 0) st = StringTokenizer(br.readLine()) for(i in 1..N) { list.add(list.get(i - 1) + Integer.parseInt(st.nextToken())) } for(i in 0 until M) { st = StringTokenizer(br.readLine()) var num = st.nextToken().toInt() var num2 = st.nextToken().toInt() sb.append(list.get(num2) - list.get(num - 1)).append('\n') } print(sb) } // End of main