peakIndexInMountainArray

leetcode 문제링크

Let’s call an array A a mountain if the following properties hold:

A.length >= 3
There exists some 0 < i < A.length - 1 such that A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
Given an array that is definitely a mountain, return any i such that A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1].

Example 1:

  • Input: [0,1,0]
  • Output: 1

Example 2:

  • Input: [0,2,1,0]
  • Output: 1

Note:

  • 3 <= A.length <= 10000
  • 0 <= A[i] <= 10^6
  • A is a mountain, as defined above.

나의 풀이

JavaScript

배열에서 조건에 일치하는 첫번째 인덱스를 찾아주는 findIndex() 메소드를 사용했다.

1
2
3
4
5
6
7
8
// 56 ms
var peakIndexInMountainArray = function(A) {
return A.findIndex((item, index, arr) => {
if(index < arr.length - 1) {
return item > arr[index + 1];
}
})
};

A 배열은 산이라고 했으니까 Math.max의 인덱스를 구하는 방법을 사용했다.

1
2
3
4
5
// 56ms
var peakIndexInMountainArray = function(A) {
const max = Math.max(...A);
return A.findIndex(item => item === max);
};

근데 위의 방법은 indexOf로 더 짧게 풀 수 있다.

1
2
3
4
// 56ms
var peakIndexInMountainArray = function(A) {
return A.indexOf(Math.max(...A))
};

Python

문제가 크게 어렵지 않아서 파이썬으로도 풀어봤다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 40ms
class Solution:
def peakIndexInMountainArray(self, A):
"""
:type A: List[int]
:rtype: int
"""
number = 0
before = 0
for i in A:
if number > 1 and i < before:
return number - 1
else:
number = number + 1
before = i

다른 사람 풀이

Python

파이썬의 for문은 자바스크립트의 for of처럼 i라는 변수에 리스트의 요소가 대입되니까 인덱스는 어떻게 구하지라고 생각했는데,
다음과 같이 range함수와 len함수를 이용하는 방법이 있었다.

1
2
3
4
5
6
7
8
9
class Solution:
def peakIndexInMountainArray(self, A):
"""
:type A: List[int]
:rtype: int
"""
for i in range(1, len(A)-1):
if A[i] > A[i-1] and A[i]> A[i+1]:
return i

  • range(): 숫자 리스트를 자동으로 만들어 주는 함수
  • len(): 리스트 내 요소의 개수를 돌려주는 함수
Share Comments