Let’s call an array A a mountain if the following properties hold:
A.length >= 3
There exists some0 < 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 anyi
such thatA[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
9class 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(): 리스트 내 요소의 개수를 돌려주는 함수