관리 메뉴

솜씨좋은장씨

[leetCode] 162. Find Peak Element (Python) 본문

Programming/코딩 1일 1문제

[leetCode] 162. Find Peak Element (Python)

솜씨좋은장씨 2021. 2. 2. 21:43
728x90
반응형

A peak element is an element that is strictly greater than its neighbors.

Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.

You may imagine that nums[-1] = nums[n] = -∞.

 

Example 1:

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.

Example 2:

Input: nums = [1,2,1,3,5,6,4]
Output: 5
Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.

Constraints:

  • 1 <= nums.length <= 1000
  • -231 <= nums[i] <= 231 - 1
  • nums[i] != nums[i + 1] for all valid i.

Solution 1

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        peak_num = max(nums)
        
        return nums.index(peak_num)

Solution 1 풀이

먼저 max를 통해서 리스트 속 가장 큰 값인 peak_num을 구합니다.

그럼 index method를 통해서 peak_num의 index를 구하면 됩니다.

 

Solution 2

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        peak_num = max(nums)
        
        for i, num in enumerate(nums):
            if peak_num == num:
                answer = i
                break
                
        return answer

Solution 2 풀이

먼저 max를 통해서 리스트 속 가장 큰 값인 peak_num을 구합니다.

그 다음 반복문과 enumerate를 통해 nums 리스트 속 숫자를 하나씩 꺼내옵니다.

그럼 peak_num과 같아지는 시점에 반복문을 중단하고 그때의 인덱스를 정답으로 return 합니다.

Solution 3

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        peak_num = max(nums)
        
        flag = False
        
        for i in range(len(nums) // 2):
            if nums[i] == peak_num:
                answer = i
                flag = True
                break
            elif nums[len(nums) - i -1] == peak_num:
                answer = len(nums) - i -1
                flag = True
                break
        
        if len(nums) % 2 == 1 and flag == False:
            if nums[len(nums) // 2] == peak_num:
                answer = len(nums) // 2
        
        return answer

Solution 3 풀이

max를 이용해서 nums의 최대값인 peak_num을 구합니다.

값을 찾았다는 flag를 하나 False로 만들어주고

전체 리스트의 절반 길이만큼 반복문을 실행하며 peak_num이랑 맞는 숫자가 나오면 해당 인덱스를 정답으로 합니다.

nums의 길이가 홀수일 경우를 대비하여 len(nums) // 2 부분도 확인해줍니다.

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments