Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[백준] 11659번 : 구간 합 구하기4 - 코틀린 본문

코딩테스트

[백준] 11659번 : 구간 합 구하기4 - 코틀린

Wise-99 2023. 6. 9. 06:45
 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

❓ 문제 풀이

  • 처음 for문을 이용해서 계산했을 때는 시간 초과가 발생했다.
  • 매번 구간 합을 구하는 것 보다 구간 합을 구해놓고 출력하는 방법이 더 빠르다.
  • i부터 j까지의 구간 합 = j번째 숫자까지의 구간 합 - (i - 1)번째 숫자까지의 구간 합
    • 예 ) 5, 4, 3, 2, 1
      • 1 ~ 3까지의 구간 합은
        • 3번째 숫자까지의 구간 합 = 5 + 4 + 3 = 12
        • 0번째(1 - 1) 숫자까지의 구간 합 = 0
        • 12 - 0 = 12
      • 2 ~ 4까지의 구간 합은
        • 4번째 숫자까지의 구간 합 = 5 + 4 + 3 + 2 =  14
        • 1번째(2 - 1) 숫자까지의 구간 합 = 5
        • 14 - 5 = 9

 

 

 

❓ 내 코드

import java.util.Scanner

fun main() = with(Scanner(System.`in`)) {
    val N = nextInt() // 숫자의 갯수
    val M = nextInt() // 반복 횟수
    val arr = IntArray(N+1)
    
    // 0번째 숫자까지의 구간 합은 0이므로 초기 설정
    arr[0] = 0
    
    // 구간 합 입력
    for(i in 1 .. N){
        arr[i] = arr[i-1] + nextInt()
    }
    
    // 주어진 구간의 합 계산
    for(k in 0 until M){
        // 구간 입력
        val i = nextInt()
        val j = nextInt()
        
        println(arr[j] - arr[i-1])
    }
}