안드로이드 개발자의 창고
[백준] 11659번 : 구간 합 구하기4 - 코틀린 본문
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
- 1 ~ 3까지의 구간 합은
- 예 ) 5, 4, 3, 2, 1
❓ 내 코드
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])
}
}
'코딩테스트' 카테고리의 다른 글
[백준] 10986번 : 나머지 합 - 코틀린 (0) | 2023.06.16 |
---|---|
[프로그래머스] 기능개발(Lv.2) - 코틀린 (0) | 2023.05.29 |
[프로그래머스]의상(Lv.2) - 코틀린 (0) | 2023.05.29 |
[프로그래머스] k의 개수(Lv.0) - 코틀린 (0) | 2023.05.14 |
[프로그래머스] 치킨 쿠폰(Lv.0) - 코틀린 (0) | 2023.05.14 |