Swift Data Structure And Algorithm/Basic Number Theory

combinationzero

youngjaeLee1026 2022. 3. 8. 22:18

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-08 22 06 48

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-08 22 07 05

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

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-08 22 07 22

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

  1. ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ 1,000,000 ์ด๋ฏ€๋กœ 1,000,000 ํŒฉํ† ๋ฆฌ์–ผ์„ ์—ฐ์‚ฐํ•  ์ˆ˜ ์—†์„ ๋ฟ๋”๋Ÿฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ž๋ฃŒํ˜•๋„ ์—†์Œ
  2. ๋”ฐ๋ผ์„œ, ๋‹ค๋ฅธ ์‹œ์„ ์œผ๋กœ ์ ‘๊ทผ์„ ํ•ด์•ผํ•จ
  3. ๋์ž๋ฆฌ 0์˜ ๊ฐœ์ˆ˜๋Š” 10์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ฆ‰, 2์™€ 5์˜ ๊ณฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— n ๊ณผ m์— ๋Œ€ํ•˜์—ฌ 2์™€ 5๋กœ ๊ฐ๊ฐ ๋ชซ์ด 1์ด ๋  ๋•Œ ๊นŒ์ง€ ๋‚˜๋ˆ„๋ฉด์„œ 2์™€ 5์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•จ
  4. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, Combination์˜ ๊ณต์‹์— ์˜ํ•ด m๊ณผ n-m์— ๋Œ€ํ•ด์„œ๋„ 2์™€ 5์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•จ
  5. 2์™€ 5์˜ ๊ณฑ์…ˆ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , Combination ๊ณต์‹์— ์˜ํ•ด n์˜ 2์˜ ๊ฐœ์ˆ˜ ๋ฐ 5์˜ ๊ฐœ์ˆ˜์—์„œ m๊ณผ n-m์˜ 2์˜ ๊ฐœ์ˆ˜ ๋ฐ 5์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œ์™ธ์‹œ์ผœ์คŒ
  6. 10์€ 2์™€ 5์˜ ์ง์ด ๋งž์•„์•ผ ํ•˜๋ฏ€๋กœ ์ตœ์ข…์ ์œผ๋กœ ๊ตฌํ•œ 2์™€ 5์˜ ๊ฐœ์ˆ˜์ค‘ ๋” ์ž‘์€ ๊ฐ’์„ ๊ตฌํ•จ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ

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

//
//  main.swift
//  CombinationZero
//
//  Created by ์ด์˜์žฌ on 2022/03/08.
//MARK: - combinationzero

//MARK: - Framework
import Foundation

//MARK: - Function
func getNumberTwoCount(_ number: Int) -> Int {
    var numberTwo = 2
    var count: Int = 0
    
    while numberTwo <= number {
        count += number / numberTwo
        numberTwo *= 2
    }
    
    return count
}

func getNumberFiveCount(_ number: Int) -> Int {
    var numberFive: Int = 5
    var count: Int = 0
    
    while numberFive <= number {
        count += number / numberFive
        numberFive *= 5
    }
    
    return count
}

func solution() -> Void {
    //MARK: - Input
    guard let input = readLine()?.components(separatedBy: " ") else { return }
    let n: Int = input.map { Int($0) }[0] ?? 0
    let m: Int = input.map { Int($0) }[1] ?? 0
    var answer: Int = 0
    var numberTwoCountN: Int = 0
    var numberFiveCountN: Int = 0
    var numberTwoCountM: Int = 0
    var numberFiveCountM: Int = 0
    var numberTwoCountNM: Int = 0
    var numberFiveCountNM: Int = 0
    var numberTwoCount: Int = 0
    var numberFiveCount: Int = 0
    
    //MARK: - Process
    numberTwoCountN = getNumberTwoCount(n)
    numberFiveCountN = getNumberFiveCount(n)
    numberTwoCountM = getNumberTwoCount(m)
    numberFiveCountM = getNumberFiveCount(m)
    numberTwoCountNM = getNumberTwoCount(n - m)
    numberFiveCountNM = getNumberFiveCount(n - m)
    
    numberTwoCount = numberTwoCountN - numberTwoCountM - numberTwoCountNM
    numberFiveCount = numberFiveCountN - numberFiveCountM - numberFiveCountNM
    answer = numberTwoCount > numberFiveCount ? numberFiveCount : numberTwoCount
    
    //MARK: - Output
    print(answer)
}
solution()

 

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

'Swift Data Structure And Algorithm > Basic Number Theory' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

fmttalpha  (0) 2022.03.08
streetree  (0) 2022.03.08
combinationpascal  (0) 2022.03.08
beehive  (0) 2022.03.08
findprime  (0) 2022.03.08