LeetCode 852. Peak Index in a Mountain Array
๐๏ธ Daily LeetCoding Challenge July, Day 25
(23.07.25) LeetCode์์๋ ์ผ๋ช
Daily Challenge
๋ฅผ ์ ๊ณตํ๋๋ฐ, ํ๋ฃจ์ ํ๋์ฉ ํ์ด๋๊ฐ๋ฉด ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ํ์ด๋ณผ ์ ์์ด์ ์ ์ตํ๋ค. ๋ณดํต ๋ค๋ฅธ ๋ฌธ์ ๋ค์ Editoral
๋ถ๋ถ์ด ์ ๊ธ๋์ด์์ด Premium User๊ฐ ์๋๋ฉด ์ฝ์ง ๋ชปํ๋๋ฐ, Daily Challenge๋งํผ์ ๊ณต๊ฐ๋์ด ์์ ์ ํ์ด์ ๋น๊ตํด๋ณผ ์ ์๋ค. LeetCode์ ์
๋ฌธํ์ง ์ด์ ๊ฒจ์ฐ 3์ผ์ด์ง๋ง, ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ดํธ์ ๋นํด์ ์ฒด๊ณ๊ฐ ํ์คํ ์ ์กํ์์ด์ ์ ์ ๋ค์๊ฒ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ๋ค๊ฐ์จ๋ค.
์ด๋ฒ ๋ฌธ์ ๋ ๋ฐฐ์ด์ ์ฆ๊ฐํ๋ค๊ฐ ๊ฐ์ํ๋ ์์ด์ ๊ทน๊ฐ์ index์ ๊ตฌํ๋ ๋ฌธ์ ๋ค. ๋ณด์๋ง์ ์ด๋ถํ์(binary-search) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค. ๋ฌธ์ ์กฐ๊ฑด์์๋ O(logn)
์๊ฐ ๋ณต์ก๋๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ์ ์๋์ด์๊ธฐ์ ํ์ ์ ๊ฐ์ง๊ณ ๋ฌธ์ ๋ฅผ ํ์๋ค.
๋์ ํ์ด
class Solution:
def peakIndexInMountainArray(self, arr: List[int]) -> int:
result = self.binary_search(arr, 0, len(arr)-1)
return result
# binary search
def binary_search(self, arr, start, end):
while start < end:
mid = start + (end-start)//2
if arr[mid-1] < arr[mid] < arr[mid+1]:
start = mid
elif arr[mid-1] > arr[mid] > arr[mid+1]:
end = mid
else:
return mid
return -1
์ด ๋ฌธ์ ํ์ ํด์๋ ์ด๋ฐ ํ์ด๋โฆ
์ด ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ ๋งค์ฐ ์น์ ํ๊ฒ๋ ์์ฃผ ์ด์์ ์ธ ๋ฐฐ์ด๋ง์ ์ ๊ณตํ๋ค. ๋ฐ๋ผ์ ์ฐ์ ๊ผญ๋๊ธฐ์ ํด๋นํ๋ ์ซ์๊ฐ ๊ณง ์ต๋๊ฐ์ด๋ผ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ ์๋ค. ํ์ง๋ง, ๊ผญ๋๊ธฐ๊ฐ ์ฌ๋ฌ๊ฐ์ธ ์์ด์ด๋ ๊ผญ๋๊ธฐ๊ฐ ํํํ ์์ด(์ต๋๊ฐ์ด ์ฌ๋ฌ๊ฐ)์ ๊ฒฝ์ฐ ์ ์ฉ์ด ํ๋ค๊ธฐ์ ์ถ์ฒํ์ง ์๋๋ค. ์ผ๋ฐํ๊ฐ ์ด๋ ต๊ธฐ์ ์ด๋ฐ ํ์ด๋ short coding์๋ ๋์์ด ๋์ง๋ง ๊ถํ์ง ์๋๋ค.
class Solution:
def peakIndexInMountainArray(self, arr: list[int]) -> int:
return arr.index(max(arr))
์ฌ๋ด
ํ์คํ ๋ฐฑ์ค์ ๋นํด์ LeetCode๋ C++
์นํ์ (?) ํ๋ซํผ์ธ ๋ฏ ํ๋ค. ์๋ฌด๋๋ ์ค๋ฌ๋์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ์
จ๋ ๋ถ๋ค์ C๋ C++๋ก ์์ํ์
จ๋ ๋ถ๋ค์ด ๋ง์ผ์๋๊น ์ฌ์ฉ์ธต์ด ๋ํผํด์ ๊ทธ๋ฐ ๊ฒฝํฅ์ด ์๊ธฐ๋ ๊ฒ ๊ฐ๋ค. Solution์ ํ์ง๋ Python๋ณด๋ค๋ C++์ด ํจ์ฌ ์ ์ตํ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ๊ทธ๋ฅ C++ ๊ณต๋ถํด์ ์๊ณ ๋ฆฌ์ฆ ์ธ์ด๋ฅผ ๋ฐ๊ฟ๋ณผ๊น ์๊ฐ์ค์ด๋ค.