๋ฌธ์ ์ค๋ช
์ง๊ฒ๋ค๋ฆฌ๋ฅผ ํ ๋ฒ ๊ฑด๋ ๋๋ง๋ค ํด๋น ๋์ ์ซ์๊ฐ -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๋ก ์ฎ๊ฒจ์ค๋ค.
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1743] swift ์์๋ฌผ ํผํ๊ธฐ: DFS (0) | 2023.04.05 |
---|---|
[๋ฐฑ์ค 1654] swift ๋์ ์๋ฅด๊ธฐ (0) | 2023.03.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ฐจ ์์ถ swift (0) | 2023.03.22 |
[๋ฐฑ์ค 9935] swift ๋ฌธ์์ด ํญ๋ฐ (1) | 2023.03.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] swift ์คํฐ์ปค ๋ชจ์ผ๊ธฐ(2) (0) | 2023.03.08 |