티스토리 뷰

문제

 

https://www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

 

풀이

 

당연하게 반복문을 통해 하나씩 더해서 출력하는건 시간초과가 난다.

 

dp문제인 것을 알기때문에 그 방향으로 접근해보면, result[k]는 k번째까지의 수를 더한 값이다. 

a번째 수부터 b번째 수까지 전부 더한다면 a + (a + 1) ...+ b - 1+ b 이렇게 될 것이다. 이것을 통해 식을 생각해보면 

 

a번째 수부터 b번째 수까지 더한 값은 result[b] - result[a - 1]이다.

 

a - 1인 것은 당연히 a이전까지는 더하는 것이 아니기때문이다.

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let m = input[1]
let numbers = readLine()!.split(separator: " ").map { Int(String($0))! }
var result = Array(repeating: 0, count: numbers.count + 1)
for i in 1...numbers.count {
    result[i] = result[i - 1] + numbers[i - 1]
}
for _ in 0..<m {
    let section = readLine()!.split(separator: " ").map { Int(String($0))! }
    print(result[section[1]] - result[section[0] - 1])
}

 

 

_____________________________________________________________________________________________________

 

 

아직까진 어떤 문제들이 dp인지 잘 모르겠음

'PS' 카테고리의 다른 글

[Swift] 백준_01타일(1904)  (1) 2023.01.30
[Swift] 백준_1로 만들기 2(12582)  (0) 2023.01.28
[Swift] 백준_2xn 타일링(11726)  (0) 2023.01.28
[Swift] 백준_RGB거리(1149)  (0) 2023.01.27
[Swift] 백준_계단 오르기(2579)  (0) 2023.01.27
댓글
최근에 올라온 글
Total
Today
Yesterday