MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4 ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

MUKER 2023. 3. 7. 19:48
 

11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j

www.acmicpc.net


์ •๋‹ต ํ’€์ด

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let arr = readLine()!.split(separator: " ").map { Int($0)! }
var sumArr = Array(repeating: 0, count: arr.count+1)

for i in 0..<arr.count {
    sumArr[i+1] = sumArr[i] + arr[i]
}

for _ in 0..<NM[1] {
    var i = readLine()!.split(separator: " ").map { Int($0)! }
    print(sumArr[i[1]] - sumArr[i[0]-1])
}

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ˆ„์ ํ•ฉ(prefix sum) ๋ฌธ์ œ๋‹ค.

 

ํ•ด๋‹น๋ฌธ์ œ๋Š” N์ด ์ตœ๋Œ€ 10๋งŒ, M์ด ์ตœ๋Œ€ 10๋งŒ์ด ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์–ด

10๋งŒ * 10๋งŒ = 1์–ต ๋ฒˆ์„ ์•„๋“ํžˆ ๋„˜๊ธฐ์— N^2์ธ ์™„์ „ํƒ์ƒ‰์€ ์•ˆ๋˜๊ณ 

์–ด๋–ป๊ฒŒ๋“  10๋งŒ์„ O(log n)์ด๋‚˜ O(1)๋กœ ํ’€์–ด๋‚ด์•ผ ํ•œ๋‹ค.

 

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let arr = readLine()!.split(separator: " ").map { Int($0)! }
for _ in 0..<NM[1] {
    let ij = readLine()!.split(separator: " ").map { Int($0)! }
    var sum = 0
    for i in ij[0]...ij[1] {
        sum += arr[i-1]
    }
    print(sum)
}

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ 10๋งŒ * 10๋งŒ์ด๊ธฐ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

 

์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฏธ๋ฆฌ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๋ˆ„์ ๋˜๋Š” ํ•ฉ์„ ์ €์žฅ์‹œ์ผœ ๋†“๋Š” ๊ฑด๋ฐ

์˜ˆ์‹œ๋ฌธ์ œ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด

๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋ฐฐ์—ด(arr) [5,4,3,2,1]์ด ์ฃผ์–ด์ง„๋‹ค.

 

 ์ฒซ ๋ฒˆ์งธ๋กœ arr์˜ count์— + 1๋งŒํผ 0์œผ๋กœ ์ฑ„์›Œ์ง„ sumArr๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

sumArr = [0,0,0,0,0,0] ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.

 

for i in 0..<arr.count {
    sumArr[i+1] = sumArr[i] + arr[i]
}

ํ•ด๋‹น ์ฝ”๋“œ๋Š” index๋ฅผ ์ด์šฉํ•ด ๋ˆ„์ ๋˜๋Š” ํ•ฉ์„ sumArr์— ์ €์žฅ์‹œ์ผœ ์ค€๋‹ค.

 

ํ•ด๋‹น ๋ฐ˜๋ณต์ด ๋๋‚œ๋‹ค๋ฉด sumArr๋Š”

[0,5,9,12,14,15]๋กœ ๋ˆ„์ ํ•ฉ์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

ํ•ด๋‹น ๋ฐ˜๋ณต์€ ์ตœ๋Œ€ 10๋งŒ์ด ๋  ๊ฒƒ์ด๋‹ค.

 

๋‹ค์Œ์œผ๋กœ, ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด M๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋Š”๋ฐ

์ค‘์ฒฉ for๋ฌธ์ด์—ˆ๋‹ค๋ฉด N * M์ด์—ˆ๊ฒ ์ง€๋งŒ

์ง€๊ธˆ์€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ๋ฐฐ์—ด ๋•์— N + M์ด ๋๋‹ค.

 

10๋งŒ ๋ฒˆ์„ ๋”ฐ๋กœ๋Œ๊ณ  10๋งŒ๋ฒˆ์„ ๋”ฐ๋กœ ๋Œ์•„

์ตœ๋Œ€ 20๋งŒ ๋ฒˆ์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋กœ ์ค„์—ˆ๋‹ค.

 

for _ in 0..<NM[1] {
    var i = readLine()!.split(separator: " ").map { Int($0)! }
    print(sumArr[i[1]] - sumArr[i[0]-1])
}

M๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’ ๋ฒ”์œ„์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ

ํ•ด๋‹น ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.