๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป iOSun
article thumbnail

๋ฌธ์ œ ์„ค๋ช…

 

์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ ๊ฑด๋„ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋Œ์˜ ์ˆซ์ž๊ฐ€ -1๋œ๋‹ค.
ํ•œ ์นœ๊ตฌ๊ฐ€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์—์„œ ๋ชจ๋‘ ๊ฑด๋„ˆ๋ฉด ๋‹ค์Œ ์นœ๊ตฌ๊ฐ€ ๊ฑด๋„Œ๋‹ค.
๋Œ์˜ ์ˆซ์ž๊ฐ€ 0์ด๋˜๋ฉด ๋” ์ด์ƒ ๋ฐŸ์„ ์ˆ˜ ์—†๊ณ  ๋‹ค์Œ ์นธ์œผ๋กœ k์นธ๋งŒ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
๋งŒ์•ฝ k์นธ ๋„˜๊ฒŒ ๋„˜์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด ๊ทธ ์นœ๊ตฌ๋Š” ๋„˜์–ด๊ฐ€์ง€ ๋ชปํ•œ๋‹ค.
์ตœ๋Œ€ ๋ช‡๋ช…๊นŒ์ง€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ์„๊นŒ?

 

 

์œ„์˜ ์˜ˆ์‹œ์—์„  k๊ฐ€ 3์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ 3์นธ์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

์ฒซ๋ฒˆ์งธ ํ’€์ด

์ฒ˜์Œ์—” ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์„œ ํ’€์–ด๋ดค๋‹ค.

๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ํ•œ ์นœ๊ตฌ๊ฐ€ ๊ฑด๋„ ๋•Œ๋งˆ๋‹ค 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ฃผ๊ณ 
๋งŒ์•ฝ 0์ด ๊ฐœ์ˆ˜๊ฐ€ k๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ๋ฉˆ์ถ”๊ณ  ๊ฑด๋„Œ ์นœ๊ตฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

func solution(_ stones:[Int], _ k:Int) -> Int {
    var stones = stones
    var answer = 0 // ๊ฑด๋„Œ ์นœ๊ตฌ์˜ ์ˆ˜
    
    while true {
        var zeroCount = 0
        for i in 0..<stones.count {
            if stones[i] == 0 { // ๋Œ์˜ ์ˆซ์ž๊ฐ€ 0์ด๋ฉด zeroCount +1
                zeroCount += 1
            } else { // ๋Œ์˜ ์ˆซ์ž๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด zeroCount๋Š” ๋‹ค์‹œ 0๋ถ€ํ„ฐ ์…ˆ
                zeroCount = 0
            }
            if zeroCount >= k {
                break
            }
            stones[i] = stones[i] > 0 ? stones[i]-1 : 0
        }
        if zeroCount >= k {
            break
        }
        answer += 1
        
    }
    
    return answer
}

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ–ˆ์œผ๋‚˜ ํšจ์œจ์„ฑ์—์„œ ํƒˆ๋ฝ ใ… 

ํšจ์œจ์„ฑ์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ..ใ… ใ… 

 

 

 

๋‘๋ฒˆ์งธ ํ’€์ด
์ œํ•œ์‚ฌํ•ญ : stones ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ 1 ์ด์ƒ 200,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํšจ์œจ์„ฑ์„ ํ†ต๊ณผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. 

์œ„์— ์ œํ•œ์‚ฌํ•ญ์„ ํ†ตํ•ด ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์นœ๊ตฌ๋ฅผ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ•œ๋‹ค.

 

func solution(_ stones:[Int], _ k:Int) -> Int {
    var left = 1, right = 200000000
    
    while left <= right {
        let mid = (left+right)/2
        var zeroCount = 0 // ์ˆซ์ž๊ฐ€ 0์ธ ๋Œ์˜ ๊ฐœ์ˆ˜
        for i in 0..<stones.count {
            if stones[i] - mid <= 0 { // (๋Œ์˜ ์ˆซ์ž-์นœ๊ตฌ์˜์ˆ˜)๊ฐ€ 0๋ณด๋‹ค ์ž‘์„ ๋•Œ
                zeroCount += 1
            } else {
                zeroCount = 0
            }
            if zeroCount >= k {
                break
            }
        }
        if zeroCount >= k {
            right = mid - 1
        } else {
            left = mid + 1
        }
    }

    return left
}

left๋Š” 1, right๋Š” 20000000์œผ๋กœ ์žก๋Š”๋‹ค. (right๋ฅผ stones.max()๋กœ ๊ตฌํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๋‚จ)

 

(๋Œ์˜ ์ˆซ์ž - mid)๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ๊ทธ ๋Œ์˜ ์ˆซ์ž๋Š” 0์ด๋ฏ€๋กœ ์ˆซ์ž๊ฐ€ 0์ธ ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ +1ํ•ด์ค€๋‹ค.

๋งŒ์•ฝ ์ˆซ์ž๊ฐ€ 0์ธ ๋Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ k์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ํ˜„์žฌ ์นœ๊ตฌ์˜ ์ˆ˜(mid)๋กœ๋Š” ๋ชป๊ฑด๋„ˆ๊ธฐ๋•Œ๋ฌธ์— right๋ฅผ mid-1๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.

ํ˜„์žฌ ์นœ๊ตฌ ์ˆ˜(mid)๋กœ ๊ฑด๋„ ์ˆ˜ ์žˆ์œผ๋ฉด left๋ฅผ mid+1๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.

 

 

ํ†ต๊ณผ

 

 

profile

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป iOSun

@iosun

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

profile on loading

Loading...