BAEKJOON-10816-์ˆซ์ž ์นด๋“œ2

A Yeon Jangยท2025๋…„ 7์›” 23์ผ

๋ฐฑ์ค€_๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
1/8

๐Ÿƒ ๋ฐฑ์ค€ 10816๋ฒˆ ์ˆซ์ž ์นด๋“œ2 โ€” ์ด๋ถ„ํƒ์ƒ‰


๐Ÿง ๋ฌธ์ œ ํ•ด์„

# target์˜ ์ฒซ ๋“ฑ์žฅ ์œ„์น˜ (lower bound)
def lower_bound(arr, target):
    start, end = 0, len(arr)
    while start < end:
        mid = (start + end) // 2
        if arr[mid] >= target:
            end = mid
        else:
            start = mid + 1
    return start


# target์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜ (lower bound)
def upper_bound(arr, target):
    start, end = 0, len(arr)-1
    while start < end:
        mid = (start + end) // 2
        if arr[mid] > target:
            end = mid
        else:
            start = mid + 1
    return start

๐Ÿ“Œ ํ•ต์‹ฌ 1

๐Ÿ”Ž while start < end :
while start <= end ์˜ ์กฐ๊ฑด์€ ๋ฌดํ•œ ๋ฐ˜๋ณต์ด ๋ฐœ์ƒํ•จ

๐Ÿ“Œ ํ•ต์‹ฌ 2

๐Ÿ”Ž โœจ start, end = 0, len(arr) :
๊ธฐ์กด์— ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ์ด๋ถ„ํƒ์ƒ‰๊ณผ ๋‹ฌ๋ฆฌ end ์ง€์ ์€ len(arr)์ด ๋˜์–ด์•ผ ํ•จ

why ?โ“

๊ธฐ์กด ์ด๋ถ„ํƒ์ƒ‰ ์ฒ˜๋Ÿผ end ์กฐ๊ฑด์„ len(arr) -1 ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋งˆ์ง€๋ง‰์ด ๋๋‚˜๋Š” "๊ฒฝ๊ณ„" ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†์Œ

๐Ÿ”‘ ๊ฒฝ๊ณ„ vs ๊ฐ’ ํ•ต์‹ฌ ์ •๋ฆฌ

์„ค์ •๋ฒ”์œ„ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•œ ์œ„์น˜์–ธ์ œ ์‚ฌ์šฉ?
end = len(arr)[0, len]๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋งจ ๋๊นŒ์ง€ ํƒ์ƒ‰ ๊ฐ€๋Šฅlower/upper_bound
end = len(arr) - 1[0, len-1]๋ฐฐ์—ด ๋‚ด๋ถ€๋งŒ ํƒ์ƒ‰๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฐพ์„ ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€