๋ฐ์ํ
์ด์งํ์
๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด์๋ ๋ฐฐ์ด์์ ์ค๊ฐ๊ฐ๊ณผ ๋น๊ตํ๋ฉฐ ํน์ ํ ๊ฐ์ ์ฐพ์๋ด๋ ํ์ ๋ฐฉ๋ฒ
๊ตฌํ
์ฌ๊ท
//์ฌ๊ท์ ์ผ๋ก ํํํ ์ด๋ถํ์
//11์ด ์ด๋์๋์ง ์ฐพ๋ ์ด๋ถํ์์
๋๋ค.
var binaryArray = [0, 1, 4, 6, 8, 11, 14, 23, 24, 26, 28, 31, 41, 50]
func recursiveBinary(array: [Int], target: Int, start: Int, end: Int) -> Int? {
//์์์ ์ด ๋์ ๋ณด๋ค ์ปค์ง๋ฉด? ์ด๋ฏธ ๋ชจ๋ ์์ญ์ ํ์ํ๋ค๋ ๋ป ์ด๊ฒ ์ฃ ? ๋ชจ๋ ์์ญ์ ํ์ํ๋๋ฐ ํ๊ฒ ์ซ์๋ฅผ
//๋ชป ์ฐพ์๋ค๋ฉด nil์ ๋ฆฌํดํด ์ฃผ๋๋ก ํฉ์๋ค.
if start > end {
return nil
}
//์ผ๋จ ๋ฐ์ผ๋ก ๋๋๊ฑฐ๋๊น ์ค๊ฐ์ ์ฐพ์์ค์๋ค.
var mid = (start + end) / 2
//์ค๊ฐ๊ฐ์ ์ฐพ์๋๋ฐ ๊ทธ๊ฒ ํ๊ฒ ์ซ์๋ผ๋ฉด ๊ทธ ๊ฐ์ ๋ฆฌํดํด ์ค๋๋ค.
if array[mid] == target {
return mid
} else if array[mid] > target {
//์ค๊ฐ๊ฐ๊ณผ ํ๊ฒ์ ๋น๊ตํ๋๋ฐ ์ค๊ฐ๊ฐ๋ณด๋ค ํ๊ฒ ์ซ์๊ฐ ์๋ค๋ฉด ์์์ ๋ถํฐ ์ค๊ฐ๊ฐ ๋ฐ๋ก ๋ฐ์๊น์ง๋ฅผ ๋ค์ ํ์ํ์ธ์
return recursiveBinary(array: array, target: target, start: start, end: mid - 1)
} else {
// ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ๋ผ๋ฉด ์ค๊ฐ๊ฐ๋ณด๋ค ํ๊ฒ ์ซ์๊ฐ ํฌ๋ค๋ ๊ฑฐ๊ฒ ์ฃ ? ์ค๊ฐ๊ฐ ๋ฐ๋ก ์๋ถํฐ ๋ง์ง๋ง๊น์ง๋ฅผ ๋ค์ ํ์ํ์ธ์.
return recursiveBinary(array: array, target: target, start: mid + 1, end: end)
}
}
var recursiveResult = recursiveBinary(array: binaryArray, target: 11, start: 0, end: binaryArray.count - 1)
print(recursiveResult)
๋ฐ๋ณต๋ฌธ
//๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํํ ์ด์ง ํ์ ์์ค์ฝ๋
func repetitionBinary(array: [Int], target: Int, start: Int, end: Int) -> Int? {
//์์์ ๊ณผ ๋์ ์ ์ก์์ฃผ๋๊ฑด ๋์ผํฉ๋๋ค.
var start = start
var end = end
//๋ง์ฐฌ๊ฐ์ง๋ก ์์์ ์ด ๋์ ๋ณด๋ค ์์ ๋์, ์ฆ ์ ์ฒด๋ฅผ ํ์ํ๊ธฐ ์ ๊น์ง ๊ณ์ ๋์์ค๋๋ค.
while start <= end {
//์ค๊ฐ๊ฐ ์ก๋๊ฒ๋ ๋๊ฐ์ฃ ?
var mid = (start + end) / 2
//์ฌ๊ธฐ๋ ๊ฑฐ์ ์ ์ฌํ ๋ฐฉ์์
๋๋ค. ์ค๊ฐ๊ฐ์ด ํ๊ฒ๊ฐ์ด๋ฉด ์ค๊ฐ๊ฐ์ ๋ฆฌํดํด์ฃผ๊ณ
if array[mid] == target {
return mid
} else if array[mid] > target {
//์ค๊ฐ๊ฐ์ด ํ๊ฒ ์ซ์๋ณด๋ค ํฌ๋ฉด ๊ทธ ๋ค์ ๋์๊ฐ๋๋ ๋์ ์ ์ค๊ฐ๊ฐ ๋ฐ๊น์ง๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
end = mid - 1
} else {
// ์ค๊ฐ๊ฐ์ด ํ๊ฒ ์ซ์๋ณด๋ค ์์ผ๋ฉด ๊ทธ ๋ค์ ๋์๊ฐ๋๋ ์์์ ์ ์ค๊ฐ๊ฐ ๋ฐ๋ก ์๊น์ง๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
start = mid + 1
}
}
//์์ ๋ฐ๋ณต๋ฌธ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ชป์ฐพ์์ while๋ฌธ์ ํ์ถํ๋ฉด ๊ฐ์ด ๊ทธ ์์ ์๋๊ฑฐ๋ nil์ ๋ฐํํด ์ฃผ์ธ์
return nil
}
var result2 = repetitionBinary(array: binaryArray, target: 4, start: 0, end: binaryArray.count - 1)
print(result2)
๋ฐ์ํ
'๐ป CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋นํธ๋ง์คํน (2) | 2023.05.13 |
---|---|
[Swift] ๋ฐฑํธ๋ํน (0) | 2023.05.09 |
[Swift] ๋์ ๊ณํ๋ฒ (Dynamic Programming) ์ดํดํ๊ธฐ (0) | 2023.04.12 |
[Swift] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.04 |
[Swift] (๋ถํ ์ ๋ณต) ํต ์ ๋ ฌ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.04.03 |