일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SW Expert Academy
- leetcode
- 맥북
- 편스토랑
- 자연어처리
- 편스토랑 우승상품
- 우분투
- ChatGPT
- Git
- 더현대서울 맛집
- AI 경진대회
- 캐치카페
- gs25
- 백준
- PYTHON
- ubuntu
- dacon
- Docker
- github
- programmers
- hackerrank
- Kaggle
- 데이콘
- 프로그래머스
- 코로나19
- 금융문자분석경진대회
- 파이썬
- Baekjoon
- Real or Not? NLP with Disaster Tweets
- 프로그래머스 파이썬
- Today
- Total
솜씨좋은장씨
[leetCode] 162. Find Peak Element (Python) 본문
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 부분도 확인해줍니다.
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[Programmers] 나누어 떨어지는 숫자 배열 (Python) (0) | 2021.02.06 |
---|---|
[leetCode] 389. Find the Difference (Python) (0) | 2021.02.03 |
[leetCode] 1232. Check If It Is a Straight Line (Python) (2) | 2021.02.01 |
[leetCode] 1009. Complement of Base 10 Integer (Python) (0) | 2021.01.31 |
[leetCode] 328. Odd Even Linked List (Python) (0) | 2021.01.30 |