1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ์์ ํ์์ผ๋ก ๊ฐ๊ฐ ์ฐจ์ด๋ฅผ ๊ตฌํ์ฌ 0์ ๊ฐ๊น์ด์ง ๊ฒ์ฌํ๋ฉด O(100,000 * 100,000)์ ์๊ฐ๋ณต์ก๋๋ฅผ ์์ํ๊ฒ ๋จ
- ๋ฐ๋ผ์ ๋จผ์ ๋ฐฐ์ด์ ์ ๋ ฌํ ํ, 0๋ฒ ์ซ์๋ถํฐ ํด๋น ์ซ์์ ๋ฐ๋ ๋ถํธ(1์ธ ๊ฒฝ์ฐ -1, -1์ธ ๊ฒฝ์ฐ 1) ์ซ์์ ์ฐจ์ด๊ฐ ์์ ์ซ์๋ฅผ ์ด์งํ์์ ํตํด ์ฐพ์์ผ ํจ
- ๋ฐฐ์ด์ ์์์ ๊ฐ์ด 10์ต์ด๋ฏ๋ก ์์ ํ๊ฒ Int64 ์๋ฃํ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ ์์
- ํ์ฌ ์ซ์์ ๋ฐ๋ ๋ถํธ ์ซ์๋ณด๋ค ์ค๊ฐ ๊ฐ์ด ์์ ๊ฒฝ์ฐ start๋ฅผ ์ฎ๊ธฐ๊ณ , ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ end๋ฅผ ์ฎ๊ฒจ ํฌ ํฌ์ธํฐ๊ฐ ๋ง๋ถ์์ ๋,
- start์ ํ์ฌ ์ซ์์ ์ฐจ์ด(์ ๋๊ฐ)์ end์ ํ์ฌ ์ซ์์ ์ฐจ์ด(์ ๋๊ฐ)์ด ๋ ์์ ์๋ฅผ ๋ฐํํ์ฌ ๊ฐ๊ฐ์ ๋ฐฐ์ด์ ์ ์ฅํจ
- ์๋์ ๋ฐฐ์ด๊ณผ ์ด์งํ์์ ํตํด ์ป์ด๋ธ ๋ฐฐ์ด์ ํฉ์ ์ ๋๊ฐ์์ ์ต์๊ฐ์ index๋ฅผ ์ฐพ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
5. ์ ์ฒด ์ฝ๋
//MARK: - ๋ ์ฉ์ก
//MARK: - Framework
import Foundation
//MARK: - Function
func getAbs(_ number: Int64) -> Int64 {
return number < 0 ? number * -1 : number
}
func binarySearch(_ array: [Int], _ start: Int, _ end: Int, _ value: Int) -> Int {
if start + 1 >= end {
return getAbs(Int64(array[start] - value)) < getAbs(Int64(array[end] - value)) ? array[start] : array[end]
}
let mid: Int = (start + end) / 2
return array[mid] < value ? binarySearch(array, mid, end, value) : binarySearch(array, start, mid, value)
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
guard let inputArray: [String] = readLine()?.components(separatedBy: " ") else { return }
let array: [Int] = inputArray.map { Int($0) ?? 0 }.sorted { $0 < $1 }
var A: [Int] = []
var B: [Int] = []
var min: Int64 = 0
var minIndex: Int = 0
//MARK: - Process
for i in 0..<N - 1 {
A.append(array[i])
}
for i in 0..<N - 1 {
B.append(binarySearch(array, i + 1, N - 1, A[i] * -1))
}
min = getAbs(Int64(A[0] + B[0]))
for i in 1..<N - 1 {
if min > getAbs(Int64(A[i] + B[i])) {
min = getAbs(Int64(A[i] + B[i]))
minIndex = i
}
}
//MARK: - Output
print(A[minIndex] < B[minIndex] ? "\(A[minIndex]) \(B[minIndex])" : "\(B[minIndex]) \(A[minIndex])")
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Binary Search' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๋ฌด ์๋ฅด๊ธฐ (0) | 2022.04.02 |
---|---|
2์ฐจ์ ์ ๋ต ์ถ์ธก (0) | 2022.04.02 |
์ซ์ ๊ฐ์ ์ธ๊ธฐ (0) | 2022.04.02 |
์ซ์๋ฐ์ค (0) | 2022.04.02 |
์ด์งํ์ (0) | 2022.04.02 |