algorithm & data structure

[๋ชจ๋‘์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜] 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ(python, Swift)

์ฐธ๊ณ  ๊ต์žฌ: ๋ชจ๋‘์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ with ํŒŒ์ด์ฌ

โ“ ๋ฌธ์ œ

1๋ถ€ํ„ฐ n๊นŒ์ง€ ์—ฐ์†ํ•œ ์ˆซ์ž์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

์ž…๋ ฅ: n
์ถœ๋ ฅ: ์ •์ˆ˜

๐ŸŒ€ ๊ธฐ์กด ํ’€์ด

python

def sum_1ton(n):
    total = 0
    for i in range(1, n+1):
        total += i
    return total

Swift5

public func sum_1ton(n: Int) -> Int {
    var sum:Int = 0
    for i in 1..<n+1 {
        sum += i
    }
    return sum
}

๐Ÿ’ญ ๋ถ„์„

n=10์ผ ๊ฒฝ์šฐ ๋ง์…ˆ ์—ฐ์‚ฐ์„ 10๋ฒˆ, n=1000์ผ ๊ฒฝ์šฐ ๋ง์…ˆ ์—ฐ์‚ฐ์„ 1000๋ฒˆ ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด ์ฝ”๋“œ๋กœ ํ’€์—ˆ์„ ๊ฒฝ์šฐ, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)

๐Ÿ’ก ์‹œ๊ฐ„๋ณต์žก๋„ ์ค„์ด๊ธฐ!

์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™ ์‹œ๊ฐ„์— 1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด,

 (10*11)/2

๋ผ๊ณ  ๊ณ„์‚ฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ณต์‹์„ ์ผ๋ฐ˜ํ™”ํ•˜๋ฉด

(n*n+1)/2

์ด๊ณ , ์ด๋Š” n์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ๋ง์…ˆ, ๊ณฑ์…‰, ๋‚˜๋ˆ—์…ˆ์„ ํ•œ ๋ฒˆ์”ฉ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด ๋œ๋‹ค.

โ—๏ธ ๊ฐœ์„ ๋œ ํ’€์ด

python

def sum_1ton(n):
    return (n * (n+1)) // 2 # ์—ฌ๊ธฐ์—์„œ // ์ด ๊ธฐํ˜ธ๋Š” ์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ!

Swift5

public func sum_1toN(n: Int) -> Int {
    return (n * (n + 1)) / 2
}

โœ”๏ธ ์—ฐ์Šต๋ฌธ์ œ

// ์—ฐ์Šต๋ฌธ์ œ 1-1

public func sumPow_1toN(n: Int) -> Int {
    var sum = 0
    for i in 0...n {
        sum += Int(pow(Double(i), 2.0))
    }
    return sum
}

// ์—ฐ์Šต๋ฌธ์ œ 1-2
// ๋‹ต: O(n)

// ์—ฐ์Šต๋ฌธ์ œ 1-3 : O(1)

public func sumPow_1toN(n: Int) -> Int {
    return (n * (n + 1) * ((2 * n) + 1)) / 6
}
๋ฐ˜์‘ํ˜•