๐ ๋ฌธ์
๐ง ์ ๊ทผ ๋ฐฉ๋ฒ
๋ฌธ์ ํ์ด ์์ฒด๋ณด๋ค ์ด ๋ฌธ์ ์์ ์๊ตฌํ๋ ์์ด๋์ด์์ ์ป์ด๊ฐ๊ฒ ๋ง๋ค.
์์ ๋ฒ์์ ๊ฐ์๊ฐ ํด ๋
์์๋๋ก index ๋ฅผ ๋๊ณ
ํด๋น ์ซ์๋ฅผ ์ ์ฅ-์กฐํ ํ ์ ์์๊น?
์์ ๋ฒ์๊ฐ ํฌ๊ณ ๊ฐฏ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ํฐ ๋ฐฐ์ด์ ์ ์ธํด์ ๋์๋น๊ต๋ฅผ ํ๊ธฐ๋ณด๋ค 10, 15, 4, 4, 11, 14 ์ด๋ ๊ฒ ์๋ค๋ฉด
์ค๋ณต์ ์ ๊ฑฐํ (4, 10, 11, 14, 15) ๋ก ๋ง๋ค๊ณ ์ํ๋ ์ซ์๋ฅผ ์ ๋ ฅํ์ ๋ ์ค๋ณต ์ ๊ฑฐํ ๋ฐฐ์ด ๋ด์์ ์ธ๋ฑ์ค๋ง return ํ๋ฉด ๋๋ค.
4 -> 0
10 -> 1
11 -> 2
14 -> 3
15 -> 4
๐ Kotlin Code
์์ ๋ณด๋ค ์์ ํฌ๊ธฐ์ ์์์ ์ค๋ณต ์ ๊ฑฐ ๊ฐ์ ์ป๊ธฐ์ํด
- ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ์ค๋ณต ์์ ์ ๊ฑฐ
- ์๋ณธ ๋ฐฐ์ด๋ก๋ถํฐ ํ๋์ฉ ํด๋น ์์์ ์ธ๋ฑ์ค๋ฅผ 1, 2์์ ๋ง๋ ๋ฐฐ์ด ๋ด์์ index ๋ฅผ ๋ฝ์์ด.
import java.io.BufferedReader
import java.io.InputStreamReader
// lower bound ๊ตฌํ๋ ์ด๋ถ ํ์
private fun getBinarySearchLowerBoundIndex(nums: List<Int>, target: Int): Int {
var left = 0
var right = nums.size
while (left < right) {
val mid = (left + right) / 2
if (nums[mid] >= target) right = mid
else left = mid + 1
}
return left
}
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
br.readLine().toInt()
val originalNums = br.readLine().split(" ").map(String::toInt).toIntArray()
val sortedNums = originalNums.sorted().distinct()
val stringBuilder = StringBuilder()
for (targetNum in originalNums) {
val lowerBoundIdx = getBinarySearchLowerBoundIndex(sortedNums, targetNum)
stringBuilder.append(lowerBoundIdx).append(" ")
}
print(stringBuilder)
}
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1629 ๊ณฑ์ (0) | 2022.11.12 |
---|---|
[๋ฐฑ์ค] 2295 ์ธ ์์ ํฉ (1) | 2022.11.05 |
[๋ฐฑ์ค] 12100 2048 (Easy) (0) | 2022.10.28 |
[๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด (0) | 2022.10.25 |
[๋ฐฑ์ค] 2457 ๊ณต์ฃผ๋์ ์ ์ (0) | 2022.10.21 |