[A&I Code Camp] Day26

Hood·2024년 10월 14일

A&I Code Camp

목록 보기
24/38
post-thumbnail

✍   Kotlin을 PS 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


누적합

이번 주 주제는 누적합 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
누적합 알고리즘
해당 내용은 위 포스트에 작성하였습니다.

2167번

https://www.acmicpc.net/problem/2167

이 문제는 2차원 배열에서 (i, j)부티 (x, y)까지의 합을 구하는 문제입니다.

Solve

  1. nm을 받아서 2차원 배열을 만들어 수를 받는다.
  2. 이때 idx, jdx에 + 1을 해줌으로 써 인덱스를 활용할 때
    [0,0]가 아닌 [1,1]부터 사용할 수 있게 만들어 준다.
  3. nextInt() 만큼 반복을 돌아줄건데 i,j,x,y 를 받아준다.
  4. 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차원 배열을 받아보았는데 누적합을 위해 미리 누적합을 해놓은 배열을 만들어
활용할 수 있도록 공부해야겠다.

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글