Algorithm

[Swift 백준] 17390 이건 꼭 풀어야 해!

Kim Roks 2025. 2. 12. 13:01

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

 

풀이 아이디어

오늘도 구간합 문제입니다.

a to b 구간의 구간합은

b 까지의 구간 합 - (a - 1) 까지의 구간합 이란걸 그대로 적용하면 됩니다, 다만 문제 중간에 정렬을 요구하니 그 부분만 유의해주시면 됩니다

 

풀이 

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

let (n,q) = (nq[0], nq[1])

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

// 비내림차순(오름차순) 정렬
arr.sort {
    return $0 < $1
}
// 인덱스를 편히 쓰기위해 맨앞에 0 추가
var prefix = [0] + Array(repeating: 0, count: n)

//인덱스 주의
for i in 1...n {
    prefix[i] = prefix[i - 1] + arr[i - 1]
}

for _ in 0..<q {
    let ab = readLine()!.split(separator: " ").map{Int($0)!}
    let (a,b) = (ab[0], ab[1])
    
    // b까지의 구간합 - (a-1)까지의 구간합
    let result = prefix[b] - prefix[a - 1]
    
    print(result)
}