๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๊ธฐ์‚ฌ๋‹จ์›์˜ ๋ฌด๊ธฐ

by hyebin (Helia) 2023. 3. 15.
๋ฐ˜์‘ํ˜•
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.1 ๋ชจ์Œ

๊ธฐ์‚ฌ๋‹จ์›์˜ ๋ฌด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

์ˆซ์ž๋‚˜๋ผ ๊ธฐ์‚ฌ๋‹จ์˜ ๊ฐ ๊ธฐ์‚ฌ์—๊ฒŒ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ number๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ๋“ค์€ ๋ฌด๊ธฐ์ ์—์„œ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๊ธฐ์‚ฌ๋Š” ์ž์‹ ์˜ ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ์˜ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง„ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ด์›ƒ๋‚˜๋ผ์™€์˜ ํ˜‘์•ฝ์— ์˜ํ•ด ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ •ํ•˜๊ณ , ์ œํ•œ์ˆ˜์น˜๋ณด๋‹ค ํฐ ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง„ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์‚ฌ๋Š” ํ˜‘์•ฝ๊ธฐ๊ด€์—์„œ ์ •ํ•œ ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง€๋Š” ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, 15๋ฒˆ์œผ๋กœ ์ง€์ •๋œ ๊ธฐ์‚ฌ๋‹จ์›์€ 15์˜ ์•ฝ์ˆ˜๊ฐ€ 1, 3, 5, 15๋กœ 4๊ฐœ ์ด๋ฏ€๋กœ, ๊ณต๊ฒฉ๋ ฅ์ด 4์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ด์›ƒ๋‚˜๋ผ์™€์˜ ํ˜‘์•ฝ์œผ๋กœ ์ •ํ•ด์ง„ ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๊ฐ€ 3์ด๊ณ  ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ดˆ๊ณผํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ์ด 2๋ผ๋ฉด, 15๋ฒˆ์œผ๋กœ ์ง€์ •๋œ ๊ธฐ์‚ฌ๋‹จ์›์€ ๋ฌด๊ธฐ์ ์—์„œ ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๊ธฐ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ 1๋‹น 1kg์˜ ์ฒ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌด๊ธฐ์ ์—์„œ ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋‘ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

๊ธฐ์‚ฌ๋‹จ์›์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ number์™€ ์ด์›ƒ๋‚˜๋ผ์™€ ํ˜‘์•ฝ์œผ๋กœ ์ •ํ•ด์ง„ ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ limit์™€ ์ œํ•œ์ˆ˜์น˜๋ฅผ ์ดˆ๊ณผํ•œ ๊ธฐ์‚ฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฌด๊ธฐ์˜ ๊ณต๊ฒฉ๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ power๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฌด๊ธฐ์ ์˜ ์ฃผ์ธ์ด ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋‘ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ number ≤ 100,000
  • 2 ≤ limit ≤ 100
  • 1 ≤ power ≤ limit

์ž…์ถœ๋ ฅ ์˜ˆ

number limit power result
5 3 2 10
10 3 2 21

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ [1, 2, 2, 3, 2] ๊ฐœ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ณต๊ฒฉ๋ ฅ ์ œํ•œ ์ˆ˜์น˜์ธ 3์„ ๋„˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋Š” ํ•ด๋‹น ์ˆ˜๋“ค์˜ ํ•ฉ์ธ 10์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 10์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ [1, 2, 2, 3, 2, 4, 2, 4, 3, 4] ๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๊ฐ€ 3์ด๊ธฐ ๋•Œ๋ฌธ์—, 6, 8, 10๋ฒˆ ๊ธฐ์‚ฌ๋Š” ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์ˆ˜๋“ค์˜ ํ•ฉ์ธ 21์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int {
    var result = 0


    for n in 1...number{
	var i = 1, cnt = 0
        
        while i*i <= n{
            if n%i == 0{
                cnt += n/i == i ? 1 : 2
            }
            i += 1
        }
        result += cnt <= limit ? cnt : power
    }
    return result
}
1๋ถ€ํ„ฐ number๊นŒ์ง€ ์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด n์„ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

i๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์„ ์–ธํ•œ ํ›„ i๋ฅผ √n๊นŒ์ง€ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ whie๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. (i*i <= n)
n%i๊ฐ€ 0์ธ๊ฒฝ์šฐ i๋Š” n์˜ ์•ฝ์ˆ˜์ด๋‹ค.
cnt ๋ณ€์ˆ˜์— n/i ๊ฐ€ i๋ผ๋ฉด 1์„ ์•„๋‹ˆ๋ผ๋ฉด 2๋ฅผ ๋”ํ•œ๋‹ค.
(ex - n์ด 25์ผ ๋•Œ i๊ฐ€ 1์ด๋ผ๋ฉด 1, 25 2๊ฐœ์˜ ์•ฝ์ˆ˜๊ฐ€ ์Œ์„ ์ด๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— 2๋ฅผ ์ฆ๊ฐ€ํ•œ๋‹ค.
i๊ฐ€ 5๋ผ๋ฉด, 5 ํ•œ ๊ฐœ๋งŒ ์•ฝ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— 1์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (25/5 = 5))

result ๋ณ€์ˆ˜์— ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์€ cnt ๋ณ€์ˆ˜๊ฐ€ limit ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘๋‹ค๋ฉด cnt๋ฅผ ์•„๋‹ˆ๋ผ๋ฉด power๋ฅผ ๋”ํ•œ๋‹ค

๋‹ค๋ฅธ ํ’€์ด

import Foundation

func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int {
    var attack = [Int](repeating: 0, count: number+1)

    for i in 1...number {
        var c = i

        while c <= number {
            attack[c] += 1
            c += i
        }
    }
    attack = attack.map { $0 > limit ? power : $0 }
    return attack.reduce(0, +)
}
์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ Intํ˜• ๋ฐฐ์—ด attack์„ ์„ ์–ธํ•œ๋‹ค.
attack์€ number+1์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด i๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
๋ณ€์ˆ˜ c๋ฅผ i๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์„ ์–ธํ•œ๋‹ค.
c๊ฐ€ number๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ while ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.
attack[c]๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ ํ›„ c๋ฅผ i๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
(ex - n์ด 4์ธ ๊ฒฝ์šฐ i ๊ฐ€ 1์ผ ๋•Œ, attack์˜ ์ธ๋ฑ์Šค๊ฐ€ 1,2,3,4์ธ ๊ฒฝ์šฐ์— 1์”ฉ ๋”ํ•ด์ง„๋‹ค. (1์€ ๋ชจ๋“  ์ˆ˜์˜ ์•ฝ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—)
i๊ฐ€ 2์ธ ๊ฒฝ์šฐ์—๋Š” attack์˜ ์ธ๋ฑ์Šค๊ฐ€ 2,4์ธ ๊ฒฝ์šฐ์— 1์”ฉ ๋”ํ•ด์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด i์˜ ๋ฐฐ์ˆ˜์—๋งŒ 1์”ฉ ๋”ํ•ด์ง€๊ฒŒ ๋œ๋‹ค)

์ดํ›„ attack ๋ฐฐ์—ด์—์„œ map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ’์ด limit๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” power๋กœ ์•„๋‹ˆ๋ผ๋ฉด ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
reduceํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ attack๋ฐฐ์—ด์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•