Swift Data Structure And Algorithm/Recursive Function

๊ฑฐ๋“ญ ์ œ๊ณฑ ๊ตฌํ•˜๊ธฐ L

youngjaeLee1026 2022. 4. 7. 16:28

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 16 24 16

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 16 24 24

3. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 16 24 35

4. ๋ฌธ์ œ ์„ค๊ณ„

  • ๊ฑฐ๋“ญ์ œ๊ณฑ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€ํ•จ์ˆ˜, ๋‹จ์ˆœ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์œ„ ๋ฌธ์ œ์˜ ํฌ๊ธฐ๋ฅผ ๋ณด๋ฉด m์ด 10^18 ์ด๋ฏ€๋กœ, O(m)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Œ
  • ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ง€์ˆ˜์˜ ๊ฒฝ์šฐ ๊ฑฐ๋“ญ ์ œ๊ณฑ๋ผ๋ฆฌ ๊ณฑํ•˜๊ฒŒ ๋˜๋ฉด ์ง€์ˆ˜๋ผ๋ฆฌ๋Š” ๋ง์…ˆ์„ ํ•˜๊ฒŒ๋˜๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • m(์ง€์ˆ˜)๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ๋Š” n^(m / 2)๋ฅผ ๋‘๋ฒˆ ๊ณฑํ•จ์œผ๋กœ์จ n^m์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ n^(m - 1) * n์„ ํ†ตํ•ด์„œ n^m์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ
  • ๋”ฐ๋ผ์„œ m == 0์ด ๋  ๋•Œ ๊นŒ์ง€(๊ธฐ์ €์กฐ๊ฑด) ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด, O(log m)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

5. ์ „์ฒด ์ฝ”๋“œ

//MARK: - ๊ฑฐ๋“ญ ์ œ๊ณฑ ๊ตฌํ•˜๊ธฐ L

//MARK: - Framework
import Foundation

//MARK: Function
func getPowerL(_ n: Int, _ m: Int64) -> Int64 {
    if m == 0 {
        return 1
    }
    
    if m % 2 == 0 {
        let result: Int64 = getPowerL(n, m / 2) % 10007
        return result * result % 10007
    } else {
        return Int64(n) * getPowerL(n, m - 1) % 10007
    }
}

func solution() -> Void {
    //MARK: - Input
    guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
    
    let n: Int = input.map { Int($0) }[0] ?? 0
    let m: Int64 = input.map { Int64($0) }[1] ?? 0
    var result: Int64 = 0
    
    //MARK: - Process
    result = getPowerL(n, m)
    
    //MARK: - Output
    print(result)
}
solution()

 

์ „์ฒด์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.