자료구조, 알고리즘
[LeetCode] Find Peak Element - 자바스크립트 풀이
개발공주
2021. 11. 28. 14:47
728x90
이진탐색으로 푸는 것 자체는 별로 어렵진 않았으나 슬슬 이진탐색 풀이가 필요하다는 것을 떠올리기 힘들 것 같음
1. 접근 방법
(1) 정렬이 돼 있지 않은 nums가 주어짐에도 문제가 이진 탐색 분류 내에 있는 이유는 역시 기준 mid의 양옆 원소를 비교해서 왼쪽이 클 때와 오른쪽이 클 때를 구분하는 로직이 필요하기 때문임
(2) mid의 양옆 원소가 mid보다 작으면 mid 리턴.
if (nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) return mid;
(3) mid의 원소가 mid+1의 원소보다 작으면 left를 mid의 오른쪽으로 넘겨줌.
(4) mid의 원소가 mid+1의 원소보다 보다 크면 right를 mid 값으로 옮겨줌.
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
2. 전체 풀이
var findPeakElement = function(nums) {
if (nums.length === 1) return 0;
let left = 0;
let right = nums.length;
let mid = 0;
while (left < right) {
mid = left + Math.floor((right - left) / 2);
if (nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) return mid;
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
Math.floor((left - right) / 2) 로 오타를 계속 내고 있어서 1시간 삽질 ㅋ
728x90