
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 누적합 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
누적합 알고리즘
해당 내용은 위 포스트에 작성하였습니다.
https://www.acmicpc.net/problem/2167
이 문제는 2차원 배열에서 (i, j)부티 (x, y)까지의 합을 구하는 문제입니다.
n과m을 받아서 2차원 배열을 만들어 수를 받는다.- 이때
idx,jdx에 + 1을 해줌으로 써 인덱스를 활용할 때
[0,0]가 아닌 [1,1]부터 사용할 수 있게 만들어 준다.nextInt()만큼 반복을 돌아줄건데i,j,x,y를 받아준다.sum변수에 2중 반복문으로 해당 인덱스의 값을 모두 더해준다.
import java.io.StreamTokenizer
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
fun nextInt() : Int {
nextToken()
return nval.toInt()
}
val n = nextInt(); val m = nextInt()
val list = Array(n + 1){ IntArray (m + 1) { 0 }}
repeat(n) { idx ->
repeat(m) {jdx ->
list[idx+1][jdx+1] = nextInt()
}
}
repeat(nextInt()){
val i = nextInt(); val j = nextInt(); val x = nextInt(); val y = nextInt()
var sum = 0
for (idx in i..x){
for(jdx in j..y){
sum += list[idx][jdx]
}
}
println(sum)
}
}

처음 2차원 배열을 받아보았는데 누적합을 위해 미리 누적합을 해놓은 배열을 만들어
활용할 수 있도록 공부해야겠다.