์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค:)
PS๋ก ํ๋ฃจ๋ฅผ ํ์ฐจ๊ฒ ์์ํ๋ ค๊ณ ํ๋๋ฐ ์ด์ ํ ์ผ์ ์ข ํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ด์ผ๊ฒ ์ด์...ใ <-<
์ค๋ ์ ๋ฅผ ๊ดด๋กญํ ๋ฌธ์ ๋ฅผ ๋ณด์์ฃ ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ๋ ์ญ๊ณ .
๋ฌธ์ ๋งํฌ
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ํ์ด
์ฒ์ ํ์ด
ํฌ ํฌ์ธํฐ ํ์ฉ (ํ ์คํธ์ผ์ด์ค ๋ชจ๋ ํต๊ณผ, but ํจ์จ์ฑ 0์ )
import Foundation
func solution(_ stones:[Int], _ k:Int) -> Int {
var pointer1 = 0, pointer2 = k-1
var max = Int.max // ๊ธธ์ด k์ธ ๊ตฌ๊ฐ์์์ ์ต๋๊ฐ ์ ์ฅ
while pointer2 < stones.count {
let maxElement = stones[pointer1...pointer2].max()!
if max > maxElement { max = maxElement }
pointer1 += 1
pointer2 += 1
}
return max
}

์ฒ์์๋ ํฌ ํฌ์ธํฐ๋ฅผ ํ์ฉํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๊ธฐ๋ฒ์ผ๋ก k๊ฐ์ ๋๋ค๋์ ํ ๊ตฌ๊ฐ์ผ๋ก ์ค์ ํด์ ์ ์ฒด๋ฅผ ์ค์บํ๋ ๋ฐฉ์์ผ๋ก ํ์์ต๋๋ค.
์๋ํ๋ฉด, ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๋ ์ด์ ๊ฑด๋์ง ๋ชปํ๊ฒ ๋๋ ์๊ฐ์ ์ ํ ์ซ์๊ฐ 0์ด ๋๋ ๋๋ค๋์ด k๊ฐ ์ฐ๋ฌ์ ๋์ค๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ธธ์ด๊ฐ k์ธ ๊ตฌ๊ฐ ์์์์ ์ต๋๊ฐ์ด ํด๋น ๊ตฌ๊ฐ์ ๊ฑด๋ ์ ์๋ ์ฌ๋์ ์ต๋ ์ซ์๋ผ๋ ๊ฒ์ ํ์ ํ๊ณ , ํญ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋์ ๋ฐ์์ผ ํ๋ฏ๋ก ํ ์ฌ๋์ด ๊ฑด๋ ๋๋ง๋ค ์ ์ฒด ๋์ ์ซ์๊ฐ 1์ฉ ๊ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋ ์ฌ๋์ ์ต๋ ์ซ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ํ ๊ตฌ๊ฐ ๋ด์ ์ต๋๊ฐ์ ์ ์ฅํ๋ฉด์ ๋ ์์ ์ต๋๊ฐ์ด ๋์ค๋ฉด ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ(์ต๋๊ฐ๋ค ์ค ์ต์๊ฐ์ด ์ต์ข ๋ต)์ผ๋ก ์ต์ข ๊ฐ์ ๊ตฌํ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ด๋ฌํ ์์ด๋์ด๋ ๋ง์๋ ๊ฒ ๊ฐ์๋ฐ, ์ ์ฒด ๋ค๋ฆฌ๋ฅผ ์ค์บํ๋ ๊ณผ์ ์์ ๊ตฌ๊ฐ ๋ด์ ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋งค๋ฒ ์ ์ฒด ๋ฐฐ์ด์ k๋งํผ ์ฌ๋ผ์ด์คํด์ ๊ธธ์ด๊ฐ k์ธ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(k)๊ฐ ๋์ด ์ ์ฒด ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ธธ๋ค๋ฉด ๋นํจ์จ์ ์ธ ํ์ ๋ฐฉ์์ด ๋ฉ๋๋ค. (์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ stones ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ต๋ 200,000์ ๋๋ค.)
ํจ์จ์ฑ์ ์ด๋ป๊ฒ ๊ฐ์ ํ ๊น.. ํ๋ค๊ฐ ์ด์ ์ ๋ฐฐ์ด์ ์์๋ฅผ ๊ณ์ ์ถ๊ฐํด์ฃผ๋ฉด์ ์ต๋๊ฐ or ์ต์๊ฐ์ ์ ๋ฐ์ดํธ ํด์ฃผ์ด์ผ ํ ๋ ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ ๊ธฐ์ต์ด ์์ด์ ํ์ ๊ตฌํํด์ ๊ฐ์ ํด๋ณด์! ๋ผ๋ ์์ด๋์ด๊ฐ ๋ ์ฌ๋์ง๋ง, ์ฐ์ ์์ ํ์ ํฌ๊ธฐ๋ฅผ ๊ณ์ k๋ก ์ ์งํ๊ธฐ ์ํด์๋ ์ ์ฒด ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์๋ก์ด ๊ฐ์ insertํด์ค ๋ ๋ฐฐ์ด์ ๋ฐ๋ก ์ด์ ์ธ๋ฑ์ค์ ์์๋ฅผ ์ฐ์ ์์ ํ์์ ์ญ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ฐ์ ์์ ํ์์๋ ํน์ ์์๋ฅผ ์ฐพ์์ remove ์ฐ์ฐ์ ํด์ค ์๊ฐ ์๊ธฐ ๋๋ฌธ์ (์ฐ์ ์์ ํ์ ์์๋ insert, removeํด์ค ๋๋ง๋ค ์์๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ removeFirst()๋ก๋ ์ด์ ์ฝ์ ๊ฐ ์ญ์ ๋ถ๊ฐ) ์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ์ ํ ์ ์๊ฒ ๊ตฌ๋..๋ฅผ ๊นจ๋ซ๊ณ ๋ค๋ฅธ ํ์ด๋ฅผ ์ฐพ์๋ณด์์ต๋๋ค..
์ต์ข ํ์ด
๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ ๊ฒฐ๊ณผ, ์ด๋ถ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค. (์ด๋ถ ํ์์ ์๊ฐ์ง๋ ๋ชปํ์ด์)
๊ฑด๋ ์ ์๋ ์ฌ๋์ ์๋ฅผ ๋ฐ์ผ๋ก ์ค์ฌ๊ฐ๋ฉด์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์ต์ ์ ํด๋ฅผ ์ฐพ์๋ด๋ ๋ฐฉ์์ด์๋๋ฐ์, ์ด๋ถ ํ์์ ์ด์ฉํ ํ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. left์ right๋ฅผ ๊ฐ๊ฐ stones ๋ฐฐ์ด์ ์์๊ฐ ๋ ์ ์๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. (left = 1, right = 200000000)
2. mid๋ช ์ ์ฌ๋์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋์ง ํ์ธํด๋ด ๋๋ค.
3-1. 2์ ๊ณผ์ ์์ ๊ฑด๋ ์ ์์ผ๋ฉด mid๋ช ์ด์์ ๋ฒ์๋ฅผ ํ์ํ๋ฉด ๋๋ฏ๋ก left ๊ฐ์ mid+1๋ก ๋ฐ๊ฟ๋๋ค.
3-2. 2์ ๊ณผ์ ์์ ๊ฑด๋ ์ ์๋ค๋ฉด right ๊ฐ์ mid๋ช ์ดํ์ ๋ฒ์๋ฅผ ํ์ํ๋ฉด ๋๋ฏ๋ก mid๋ก ๋ฐ๊ฟ๋๋ค.
4. ๊ฑด๋ ์ ์๋ ์ต๋ ๋ช ์๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก, left < right ์ธ ๋์ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
Swift ํ์ด ์ฝ๋
import Foundation
func solution(_ stones:[Int], _ k:Int) -> Int {
var left = 1
var right = 200000000
while left < right {
let mid = (left + right) / 2
var skipCount = 0 // ๊ฑด๋๋ฐ์ด์ผํ๋ ๋์ ๊ฐ์
for i in 0..<stones.count {
if stones[i] - mid <= 0 { // ์ ์ 0 ์ดํ๋ก ๋จ์ด์ง๋ ๊ณณ ์๊ธฐ๋ฉด
skipCount += 1
if skipCount >= k { // ์ ์ 0๋๋ ๊ณณ์ด ์ฐ๋ฌ์ k๊ฐ ์ด์ ๋์ค๋ฉด
break // ๋ฐ๋ณต๋ฌธ ํ์ถ
}
} else { // mid๋ช
๋งํผ ๊ฑด๋ ์ ์์ผ๋ฉด
skipCount = 0 // skipCount ์ด๊ธฐํ
}
}
// ๊ฐ๋ฅ ์ฌ๋ถ์ ๋ฐ๋ผ left, right ๋ค์ ์ค์
if skipCount >= k { // mid๋ช
๊ฑด๋ ์ ์์ผ๋ฉด mid๋ช
์ดํ์ ๋ฒ์๋ฅผ ํ์
right = mid
} else { // mid๋ช
๊ฑด๋์ ์์ผ๋ฉด mid๋ช
์ด์์ ๋ฒ์๋ฅผ ํ์
left = mid + 1
}
}
return left
}
[์ฐธ๊ณ ์๋ฃ]
[Swift ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ / 2019 ์นด์นด์ค ์ธํด์ญ
์๋ ํ์ธ์. ๊ฐ๋ฐ ์ค์ธ ์ ์ฃผ์ ๋๋ค. ์ค๋์ "ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ" ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค. Github GitHub - jeongju9216/SwiftAlgorithm: ์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ ์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ. Contribute to jeongju9
jeong9216.tistory.com
ํ๋ก๊ทธ๋๋จธ์ค: ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ - Swift
https://school.programmers.co.kr/learn/courses/30/lessons/64062์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ ์๋ ์น๊ตฌ๋ค์ ์๋ก ์ด๋ถํ์์ ์ํํ๋ฉด ๊ฐ๋จํ ํ ์ ์๋ค
velog.io
[์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด] ํ๋ก๊ทธ๋๋จธ์ค ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ํ์ด
facerain.club
'๐ฅ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ ๊ตญ์ฌ์ฌ (2) | 2023.04.05 |
---|---|
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.2) - ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ (2) | 2023.04.03 |
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ๊ธฐ์ง๊ตญ ์ค์น (2) | 2023.03.30 |
[Algorithm/Swift] ์ด์ง ํ์(Binary Search) (0) | 2023.02.06 |
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.2) - ๋ฌด์ธ๋ ์ฌํ (1) | 2023.01.29 |