프린세스 다이어리

[LeetCode] Find Peak Element - 자바스크립트 풀이 본문

자료구조, 알고리즘

[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
Comments