ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ๋ˆ„์  ํ•ฉ
    Algorithm 2023. 5. 4. 15:17

    ๋งŒ์•ฝ ๋ฐฐ์—ด [1, 2, 3, 4, 5, 6]์—์„œ ์ธ๋ฑ์Šค 3๋ฒˆ์งธ ์›์†Œ ~ 5๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

    2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

    1. ์™„์ „ ํƒ์ƒ‰์œผ๋กœ for ๋ฌธ ๋Œ๋ฆฌ๊ธฐ

    ๋ฐฐ์—ด์— ํฌํ•จ๋œ ์›์†Œ์˜ ์ˆ˜๊ฐ€ N๊ฐœ์ผ ๋•Œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

    int answer = 0;
    
    for (int i = 3; i < 6; i++) {
    	answer += arr[i];
    }

     

    2. psum ์‚ฌ์šฉํ•˜๊ธฐ

    psum์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(1)๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

    psum์€ ์›๋ณธ ๋ฐฐ์—ด์˜ ์›์†Œ๋“ค์˜ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•œ ๋ฐฐ์—ด์ด๋‹ค.

     

    i = 0์ผ ๋•Œ, psum[i] = arr[i]์œผ๋กœ, psum[0] = arr[0]์ด๋‹ค.

    i = 1์ผ ๋•Œ์—๋Š” psum[1] = arr[0] + arr[1] = psum[0] + arr[1]์ด๊ณ ,

    i = 2์ผ ๋•Œ์—๋Š” psum[2] = arr[0] + arr[1] + arr[2] = psum[1] + arr[2]์ด๊ณ ,

    i = 3์ผ ๋•Œ์—๋Š” psum[3] = arr[0] + arr[1] + arr[2] + arr[3] = psum[2] + arr[3]์ด๋ฏ€๋กœ,

     

    ์ตœ์ข…์ ์œผ๋กœ psum[i] = psum[i - 1] + arr[i] (i ≥ 1)๋ผ๋Š” ์‹์„ ์–ป๊ฒŒ ๋œ๋‹ค.

     

     

    ๊ทธ๋Ÿผ arr[3]์—์„œ arr[5]๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ?

    ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์— ์˜ํ•ด์„œ ๋‚˜์˜จ ์‹์„ ์ผ๋ฐ˜ํ™”ํ•˜๋ฉด ๋ฐฐ์—ด arr์˜ ์–ด๋–ค ๊ตฌ๊ฐ„ i, j (i ≤ j)์˜ ํ•ฉ์€

    arr[i] + arr[i + 1] + … + arr[j - 1] + arr[j] = psum[j] - arr[i - 1]๊ณผ ๊ฐ™๋‹ค.

     

    ์ด ๋•Œ ๋งŒ์•ฝ i๊ฐ€ 0์ผ ๊ฒฝ์šฐ psum[i - 1]์€ ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด๋ฏ€๋กœ,

    i๊ฐ€ 0์ผ ๋•Œ๋Š” psum[i - 1]์€ 0์ด๋ผ๊ณ  ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•ด์ค˜์•ผํ•œ๋‹ค.

     

    Swift ์ฝ”๋“œ

    func partialSum(_ psum: [Int], i: Int, j: Int) -> Int {
        if (i == 0) { return psum[j] }
        return psum[j] - psum[i - 1]
    }
    
    var arr = [1, 2, 3, 4, 5, 6]
    var psum: [Int] = []
    
    var sum = 0
    for number in arr {
        sum += number
        psum.append(sum)
    }
    
    print(psum) // [1, 3, 6, 10, 15, 21]
    
    let partialSumResult = partialSum(psum, i: 3, j: 5) // 4 + 5 + 6 = 15
    print(partialSumResult) // 15

     

    C++ ์ฝ”๋“œ

    int partial_sum(int* psum, int i, int j) {
         if (i == 0) return psum[j];
         return psum[j] - psum[i - 1];
    }

     

     

    ๊ด€๋ จ ๋ฌธ์ œ๋“ค

    ๋ฐฑ์ค€ 11441๋ฒˆ ํ’€์ด

    ๋ฐฑ์ค€ 2167๋ฒˆ ํ’€์ด

    ๋ฐฑ์ค€ 11659๋ฒˆ ํ’€์ด

     

     

    ๋Œ“๊ธ€

Designed by Tistory.