백준 11659번
https://www.acmicpc.net/problem/11659
// 누적 합 구하기
arr = IntArray(N + 1)
StringTokenizer(br.readLine()).run {
for (i in 1..N) {
arr[i] = arr[i - 1] + nextToken().toInt()
}
}
누적 합을 미리 배열에 저장한다.
Ex)
[1, 2, 3, 4, 5]
배열일 경우
[1, 3, 6, 10, 15]
라는 배열이 된다.
여기서 구간 사이의 합을 구할 때는 [3, 5]
라고 할 때
5까지의 누적합을 사용하면 되지만, 1 2의 합의 값은 없어야 한다. 그렇게 하려면
2
의 누적 합을 제거 해주면 된다.
이렇게되면 arr[5] - arr[3 - 1]
이 구간의 합을 구할 수 있는 방법이 된다.
import java.io.*
import java.util.*
// input
private lateinit var br: BufferedReader
// variables
private var N = 0
private var M = 0
private lateinit var arr: IntArray
fun main() {
br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
input()
bw.write(solve())
bw.close()
} // End of main
private fun solve(): String {
val sb = StringBuilder()
// 구간 합 구하기
repeat(M) {
StringTokenizer(br.readLine()).run {
val start = nextToken().toInt()
val end = nextToken().toInt()
sb.append(arr[end] - arr[start - 1]).append('\n')
}
}
return sb.toString()
} // End of solve
private fun input() {
StringTokenizer(br.readLine()).run {
N = nextToken().toInt()
M = nextToken().toInt()
}
// 누적 합 구하기
arr = IntArray(N + 1)
StringTokenizer(br.readLine()).run {
for (i in 1..N) {
arr[i] = arr[i - 1] + nextToken().toInt()
}
}
} // End of input