- ์ ๋ง ์ด๋ ค์ด ๋ฌธ์ ์๋ค.
pivot index
์ ๊ฐ๋
์ ์ดํดํด์ผ ํ๋ค.
- ์ผ์ชฝ ์ ๋ฐ๊ณผ ์ค๋ฅธ์ชฝ ์ ๋ฐ์ ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ์๊ฐํด์ผ ํ๋ค.
- ์ฃผ์์ ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
Solution
from typing import List
class Solution:
def search(self, nums: List[int], target: int) -> int:
lt, rt = 0, len(nums) - 1
while lt <= rt:
# (rt - lt) // 2: ํ์ ๋ฒ์์ ์ค๊ฐ ์ธ๋ฑ์ค
# ๊ฑฐ๊ธฐ์ lt๋ฅผ ๋ํ๋ฉด -> ์ค์ ์ค๊ฐ ์ธ๋ฑ์ค๊ฐ ๋จ
mid = (rt - lt) // 2 + lt
if nums[mid] == target:
return mid
# ์ผ์ชฝ ์ ๋ฐ์ด ์ ๋ ฌ๋์์ผ๋ฉด
if nums[lt] <= nums[mid]:
# ์ผ์ชฝ ์ ๋ฐ์์ target์ ์ฐพ์์ผ ํ๋์ง ํ์ธ
if nums[mid] > target >= nums[lt]:
# nums[mid]๊ฐ target๋ณด๋ค ํฌ๋ ๋น์ฐํ ๋นผ์ค์ผ ๋จ
mid -= rt
rt -= 1
continue
mid += lt
lt += 1
continue
# ์ค๋ฅธ์ชฝ ์ ๋ฐ์ด ์ ๋ ฌ๋์์ผ๋ฉด
# ์ค๋ฅธ์ชฝ ์ ๋ฐ์์ target์ ์ฐพ์์ผ ํ๋์ง ํ์ธ
if nums[mid] < target <= nums[rt]:
# nums[mid]๊ฐ target๋ณด๋ค ์์ผ๋ ๋น์ฐํ ๋ํด์ค์ผ ๋จ
mid += lt
lt += 1
continue
mid -= rt
rt -= 1
return -1
Reference
Leave a comment