์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[c++/LeetCode-Array] 162. Find Peak Element

  • -
๋ฐ˜์‘ํ˜•

 

๋‚œ์ด๋„Medium

ํ‚ค์›Œ๋“œ: Array

 

๋ฌธ์ œ

๋ฌธ์ œ ์›๋ฌธ:  https://leetcode.com/problems/find-peak-element/description/

 

 

Peak ์š”์†Œ๋Š” ์ด์›ƒ๋ณด๋‹ค ์—„๊ฒฉํ•˜๊ฒŒ ํฐ ์š”์†Œ๋ฅผ ๋œปํ•œ๋‹ค. 0๋ถ€ํ„ฐ ์ƒ‰์ธ์ด ์ง€์ •๋œ ์ •์ˆ˜ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, Peak ์š”์†Œ๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹น ์ƒ‰์ธ์„ ๋ฐ˜ํ™˜ํ•˜๋ผ. ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Peak์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์–ด๋–ค Peak์˜ ์ƒ‰์ธ์ด๋“  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

nums[-1] = nums[n] = -∞๋กœ ๊ฐ„์ฃผํ•ด๋„ ๋œ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด ์™ธ๋ถ€์— ์žˆ๋Š” ์ด์›ƒ๋ณด๋‹ค ์š”์†Œ๋Š” ํ•ญ์ƒ ์—„๊ฒฉํ•˜๊ฒŒ ํฌ๋‹ค๊ณ  ๊ฐ„์ฃผ๋œ๋‹ค.
O(log n) ์‹œ๊ฐ„ ๋‚ด์— ์‹คํ–‰๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

 

๋ฌธ์ œ ์ž์ฒด๋งŒ ๋†“๊ณ  ๋ณด๋ฉด Medium ๋‚œ์ด๋„๋Š” ์•„๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด O(n) ์•ˆ์— iteration์„ ๋Œ๋ฉด์„œ pivot ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—์„œ ๋ณต์žก๋„๋ฅผ O(log n) ์ด๋‚ด๋กœ  ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ œํ•œํ–ˆ๋‹ค.

 

O(log n) ๋ณต์žก๋„๋กœ๋ถ€ํ„ฐ ์‰ฝ๊ฒŒ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด binary search์ด๋‹ค. ๊ทธ๋ž˜์„œ bin_search๋ฅผ ์ ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค.

pivot์€ ๊ฒฐ๊ตญ local / global maxima๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋” ํฐ ๊ฐ’์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ๊ณณ์„ ์ฐพ์•„์„œ ๋”ฐ๋ผ๊ฐ€๋ฉด ๋œ๋‹ค. ๋”์šฑ์ด, ๋งˆ์ง€๋ง‰ ๊ฐ’์€ boundary์˜ ๊ฐ’์ด -∞๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๊ณ  ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ๊ฒƒ ์—†๋‹ค.

 

mid๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ mid๋ณด๋‹ค ํฐ ๊ฐ’์ด ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ search space๋ฅผ ์ขํžˆ๋‹ค๊ฐ€ left = right๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์˜ค๋žœ๋งŒ์— cpp๋กœ ์ž‘์„ฑํ•ด๋ดค๋‹ค.

 

#include <vector>

using namespace std;

class Solution {
public:
    int findPeakElement(vector<int>& nums) {

        int left = 0;
        int right = nums.size() - 1;

        if(nums.size() <= 1){
            return 0;
        }

        while(left < right){
            int mid = (left + right) / 2;
            if(nums[mid] < nums[mid+1]){
                left = mid + 1;
            } else {
                right = mid;
            }
        }

        return left;
    }
};

 

 

 

๋ฐ˜์‘ํ˜•

'IN DEPTH CAKE > Supercoder' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[c++/LeetCode-Array] 75. Sort Colors  (3) 2024.05.05
[c++/LeetCode-Array] 56. Merge Intervals  (2) 2024.05.04
[์ฝ”๋”ฉ/LeetCode150-(11)] 274. H-Index  (2) 2023.08.23
[์ฝ”๋”ฉ/LeetCode150-(10)] 45. Jump Game II  (0) 2023.08.22
[์ฝ”๋”ฉ/LeetCode150-(9)] 55. Jump Game  (13) 2023.08.22
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

# ๋กœ๋”ฉ ํ™”๋ฉด ๋™์ž‘ ์ฝ”๋“œ(Code) ์„ค์ •ํ•˜๊ธฐ