쥐수의 공부노트

백준 11659번 구간 합 구하기 4 본문

바킹독 알고리즘/다이나믹 프로그래밍

백준 11659번 구간 합 구하기 4

쥐수 2023. 6. 3. 19:20
728x90

정답 :

let input = readLine()!.split(separator: " ").map{Int($0)!}
let n = input[0]
let m = input[1]
var result : [Int] = []
var array = Array(repeating: 0, count: 100001)

var num = readLine()!.split(separator: " ").map{Int($0)!}

array[1] = num[0]

for i in 2...num.count {
    array[i] = array[i-1] + num[i-1]
}

for _ in 0..<m {
    var input1 = readLine()!.split(separator: " ").map{Int($0)!}
    var i = input1[0]
    var j = input1[1]
    var res = array[j] - array[i-1]
    result.append(res)
}
result.forEach{print($0)}
더보기

TMI : 이 문제도 점화식과 초기값 모두 내가 세웠다!

처음에 문제를 읽고 나서, 굉장히 간결하고 이해하기 쉬운 문제였다.

 

바로 든 생각으로는, for문을 돌려서 i번째 숫자부터 j번째 숫자까지 더해서 출력하는 방법이였다.

 

그러나, 이 방법으로 풀면 시간이 매우 오래 걸릴 것 같기에, 다른 방법을 생각해 보았다.

 

바로 배열에 저장을 할 때, 지금까지의 수의 합을 넣는것이다. 

 

그러면 i번째부터 j번째까지 더하는 식은 array[j] - array[i-1]이 된다!

 

내가 생각하고, 식을 쓰고, 코딩을 한 것에 매우 기분이 좋다!

728x90