1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- n(100,000)๊ฐ์ ์ซ์์ ๋ํด q(100,000)๋ฒ ์ซ์์ ๊ฐ์๋ฅผ ํ์ํ๊ฒ ๋๋ฉด, O(100,000 * 100,000)์ผ๋ก ์๊ฐ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
- ๋ฐ๋ผ์ n(100,000)๊ฐ์ ์ซ์์ ๋ํด ๊ณ ๊ธ ์ ๋ ฌ์ ํตํด O(n log n) ์๊ฐ ๋ณต์ก๋๊ฐ ์์๋๊ณ , ์ดํ q๋ฒ์ ์ด์งํ์ O(q log n)์ ์๊ฐ๋ณต์ก๋๊ฐ ์์๋จ
- ์ด ๋ฌธ์ ๋ ์ด์งํ์์ ๋ ๋ฒ ํด์ผ ํ๋๋ฐ, ํ ๋ฒ์ ํ์ฌ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด mid๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ, end๋ฅผ ์ด๋ ์์ผ ํฌ ํฌ์ธํฐ(start์ end๊ฐ ๋ถ๊ฒ ๋์์ ๋ ์ฆ, start + 1 == end ์ผ ๋)๊ฐ ๋ง๋ถ์์ ๋, end๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉด ํด๋น ์ซ์์ ๊ฐ์ฅ ์์ index๋ฅผ ๋ฐํํ๊ฒ ๋๊ณ ,
- ๋ง์ง๋ง ํ ๋ฒ์ ํ์ฌ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด mid๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ, start๋ฅผ ์ด๋ ์์ผ ํฌ ํฌ์ธํฐ๊ฐ ๋ง๋ถ์์ ๋, start๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉด ํด๋น ์ซ์์ ๊ฐ์ฅ ํฐ index๋ฅผ ๋ฐํํ๊ฒ ๋จ์ผ๋ก์จ
- ๊ฐ์ฅ ํฐ index์์ ๊ฐ์ฅ ์์ index์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ฒ ๋๋ฉด ํด๋น ์ซ์๊ฐ ์์ด์ ๋ช๊ฐ ์กด์ฌํ๋์ง ์ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ์ซ์ ๊ฐ์ ์ธ๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Function
func maxBinarySearch(_ array: [Int], _ start: Int, _ end: Int, _ value: Int) -> Int {
if start + 1 >= end {
return start
}
let mid: Int = (start + end) / 2
return array[mid] <= value ? maxBinarySearch(array, mid, end, value) : maxBinarySearch(array, start, mid, value)
}
func minBinarySearch(_ array: [Int], _ start: Int, _ end: Int, _ value: Int) -> Int {
if start + 1 >= end {
return end
}
let mid: Int = (start + end) / 2
return array[mid] >= value ? minBinarySearch(array, start, mid, value) : minBinarySearch(array, mid, end, value)
}
func solution() -> Void {
//MARK: - Input
guard let input = readLine()?.components(separatedBy: " ") else { return }
guard let inputArray = readLine()?.components(separatedBy: " ") else { return }
guard let inputQuestions = readLine()?.components(separatedBy: " ") else { return }
let n: Int = input.map { Int($0) }[0] ?? 0
let _: Int = input.map { Int($0) }[1] ?? 0
let array: [Int] = inputArray.map { Int($0) ?? 0}.sorted { $0 < $1 }
let questions: [Int] = inputQuestions.map { Int($0) ?? 0 }
var answer: String = ""
//MARK: - Process
for question in questions {
let maxIndex: Int = maxBinarySearch(array, 0, n, question)
let minIndex: Int = minBinarySearch(array, -1, n - 1, question)
answer += "\(maxIndex - minIndex + 1)\n"
}
//MARK: - Output
print(answer)
}
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 |