본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 17390 : 이건 꼭 풀어야 해!

by 개발하는 곰돌이 2022. 12. 28.

문제 링크

 

17390번: 이건 꼭 풀어야 해!

[2, 5, 1, 4, 3]을 비내림차순으로 정렬하면 [1, 2, 3, 4, 5]이다.

www.acmicpc.net



문제 해설

누적합과 부분합에 대한 기본적인 문제에 정렬이 추가되었다고 볼 수 있다. 입력 받은 배열을 오름차순으로 정렬한 후 각 인덱스에 대한 누적 합 배열을 생성하여 테스트 케이스 별로 \(L\)과 \(R\) 사이의 부분 합을 출력해주면 된다.


Code

import java.util.StringTokenizer

fun main() = with(System.`in`.bufferedReader()) {
    val bw = System.out.bufferedWriter()
    val (n, q) = readLine().split(' ').map { it.toInt() }
    val st = StringTokenizer(readLine())
    val arr = IntArray(n) { st.nextToken().toInt() }.sortedArray()
    val prefixSum = IntArray(n + 1)
    for (i in 1..n) {
        prefixSum[i] = prefixSum[i - 1] + arr[i - 1]
    }
    var l: Int
    var r: Int
    repeat(q) {
        StringTokenizer(readLine()).apply {
            l = nextToken().toInt()
            r = nextToken().toInt()
        }
        bw.write("${prefixSum[r] - prefixSum[l - 1]}\n")
    }
    bw.close()
}

참조 링크

누적합(Prefix Sum)과 부분합(Partial Sum) with Kotlin

댓글