๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

EarthSea 2024. 4. 2. 10:48

 

 

 

 

๐Ÿ„ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

โœ๐Ÿป Github ๋ฌธ์ œ ํ’€์ด

 

-Swift-CodingTest/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2/12953.โ€…N๊ฐœ์˜โ€…์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ at main · BaeJihae/-Swift-CodingTest

Swift๋กœ ํ‘ผ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. Contribute to BaeJihae/-Swift-CodingTest development by creating an account on GitHub.

github.com

 

 

 

๋ฌธ์ œ ์„ค๋ช…

๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(Least Common Multiple)๋ž€ ์ž…๋ ฅ๋œ ๋‘ ์ˆ˜์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ณตํ†ต์ด ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2์™€ 7์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 14๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ •์˜๋ฅผ ํ™•์žฅํ•ด์„œ, n๊ฐœ์˜ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” n ๊ฐœ์˜ ์ˆ˜๋“ค์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ณตํ†ต์ด ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด arr์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ์ด ์ˆ˜๋“ค์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

  • arr์€ ๊ธธ์ด 1์ด์ƒ, 15์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • arr์˜ ์›์†Œ๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

arr result
[2,6,8,14] 168
[1,2,3] 6

 

 

๋ฌธ์ œ ํ’€์ด

๋‚˜์˜ ํ’€์ด

import Foundation

func solution(_ arr:[Int]) -> Int {
    
    // ์†Œ์ˆ˜ ๋ฐฐ์—ด
    let a = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
    
    // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์˜ ์†Œ์ธ์ˆ˜๋ถ„ํ•ด [ ์†Œ์ˆ˜ : ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ]
    var maxDic = [Int:Int]()
    
    for num in arr {
        
        var n = num

        for i in a {
            
            var k = 0
            
            if n == 1 {      // 1์ธ ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ ๋น ์ ธ ๋‚˜๊ฐ€๊ธฐ
                continue
            }
            
            while n % i == 0 { // i์ด n์˜ ์•ฝ์ˆ˜์ผ ๋•Œ
                k += 1         // ์•ž์„œ ๋‚˜์˜จ ๊ฐ’์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด
                n = n / i   
                
                if ( maxDic[i] ?? 0 ) < k { // ์•ž์„œ ๋‚˜์˜จ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ
                    maxDic[i] = ( maxDic[i] ?? 0 ) + 1 
                }
            }
        }
    }
    
    // ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์˜ ๊ฐ’ ๊ณ„์‚ฐ
    return maxDic.reduce(1){ $0 * Int(pow(Float($1.key), Float($1.value)))}
}

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์˜ ์†Œ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ํ’€์—ˆ๋‹ค.

๋ฐฐ์—ด์˜ ๊ธธ์ด์˜ ์ตœ๋Œ€๊ฐœ์ˆ˜๊ฐ€ 15์ด๊ณ , arr์˜ ์›์†Œ๊ฐ€ 100์ดํ•˜์ด๋ฏ€๋กœ for๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค๋„ ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

100์ดํ•˜์˜ ์†Œ์ˆ˜ ๋ฐฐ์—ด์„ ๋†”๋‘๊ณ , ํ•ด๋‹น ๊ฐ’์˜ ์†Œ์ˆ˜๋ฅผ ์ฐพ์œผ๋ฉฐ ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅํ–ˆ๋‹ค.

์ด ๋•Œ, ์ „ ์ˆซ์ž์—์„œ ์ด๋ฏธ ์†Œ์ˆ˜๋กœ ์ €์žฅ์ด ๋˜์—ˆ๋‹ค๋ฉด, ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ๋ง์•„์•ผ ํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ๋งŽ์ด ๊ณ ๋ฏผํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ k๊ฐ’์„ ๋‘๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋•Œ๋งˆ๋‹ค 1์ด ์˜ฌ๋ผ๊ฐ„๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น ์†Œ์ˆ˜๊ฐ’์ด ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ k๊ฐ’๋ณด๋‹ค ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋„๋ก ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

4๋ฒˆ์—์„œ ์ผ€์ด์Šค ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋Š”๋ฐ, ๊ทธ ๋ถ€๋ถ„์€ ๋‚ด๊ฐ€ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด num๊ฐ€ a๋ฐฐ์—ด์— ํฌํ•จ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๊ฐ’์€ ์†Œ์ˆ˜ ๊ทธ ์ž์ฒด์ด๋ฏ€๋กœ ๋”•์…”๋„ˆ๋ฆฌ์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ณ  ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„์„ ํ•˜์˜€๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์—์„œ ๋”•์…”๋„ˆ๋ฆฌ์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ๋•Œ๋„ ์ด๋ฏธ ๋”•์…”๋„ˆ๋ฆฌ์— ์žˆ๋Š” ๊ฐ’์ธ์ง€ ํ™•์ธํ•œ ํ›„์— ๊ฐฏ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด์„œ ๋Œ€์ž…์„ ํ•ด์•ผํ–ˆ๋‹ค. ๋” ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ผ ๊ทธ ๋ถ€๋ถ„์„ ๋นผ๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค.

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

func gcd(_ a: Int, _ b: Int) -> Int {
  let r = a % b
  if r != 0 {
    return gcd(b, r)
  } else {
    return b
  }
}

func lcm(_ m: Int, _ n: Int) -> Int {
  return m / gcd(m, n) * n
}
func solution(_ arr:[Int]) -> Int {
    return arr.reduce(1) { lcm($0, $1) }
}

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์œผ๋กœ ํ‘ผ ๋ฌธ์ œ์ด๋‹ค. ์ด ํ’€์ด๋ฅผ ๊ผญ ์ตํ˜€๋‘์–ด์•ผ ๊ฒ ๋‹ค.