쥐수의 공부노트
백준 11659번 구간 합 구하기 4 본문
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
'바킹독 알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준 12852번 1로 만들기 2 (0) | 2023.06.03 |
---|---|
백준 11726번 2 x n 타일링 (0) | 2023.06.03 |
백준 1149번 RGB거리 (0) | 2023.06.03 |
백준 2579번 계단 오르기 (0) | 2023.06.03 |
백준 9095번 1,2,3 더하기 (0) | 2023.06.01 |