리스트에서 피크(peak) 요소를 확인해야 할 때는 리스트를 순회하면서 인접한 요소들을 서로 비교하고, 그 비교 결과에 따라 값을 반환하는 함수를 정의하면 됩니다.
피크 요소란?
피크 요소란 자신의 양옆에 있는 이웃 요소보다 크거나 같은 값을 가지는 요소를 말합니다. 리스트의 맨 앞이나 맨 끝에 있는 요소는 이웃이 한쪽에만 존재하므로, 그 하나의 이웃과만 비교하면 됩니다.
예제
아래는 이를 구현한 예제 코드입니다.
def find_peak(my_array, array_length):
# 리스트 길이가 1이면 유일한 요소가 곧 피크
if array_length == 1:
return 0
# 첫 번째 요소가 두 번째 요소보다 크거나 같으면 피크
if my_array[0] >= my_array[1]:
return 0
# 마지막 요소가 뒤에서 두 번째 요소보다 크거나 같으면 피크
if my_array[array_length - 1] >= my_array[array_length - 2]:
return array_length - 1
# 나머지 경우: 왼쪽·오른쪽 인접 요소와 모두 비교
for i in range(1, array_length - 1):
if my_array[i] >= my_array[i - 1] and my_array[i] >= my_array[i + 1]:
return i
my_list = [1, 3, 20, 4, 1, 0]
list_length = len(my_list)
print("리스트는 다음과 같습니다 :")
print(my_list)
print("결과는 다음과 같습니다")
print(find_peak(my_list, list_length))
출력
리스트는 다음과 같습니다 :
[1, 3, 20, 4, 1, 0]
결과는 다음과 같습니다
2
설명
'find_peak'라는 이름의 함수가 정의되며, 리스트와 리스트의 길이를 매개변수로 받습니다.
먼저 리스트의 길이를 확인합니다. 길이가 1이라면 유일한 요소가 곧 피크이므로 인덱스 0을 반환합니다.
첫 번째 요소와 마지막 요소는 각각 한쪽 방향의 이웃 요소와만 비교하여, 조건을 만족하면 해당 인덱스를 반환합니다.
그 외의 내부 요소들은 왼쪽과 오른쪽 인접 요소 모두와 비교하여, 두 조건을 동시에 만족하는 첫 번째 인덱스를 반환합니다.
함수 외부에서 리스트를 정의하고 콘솔에 출력합니다.
len() 함수로 구한 리스트의 길이를 변수에 저장합니다.
필요한 매개변수를 전달하며 함수를 호출합니다.
반환된 결과가 콘솔에 출력됩니다.
참고 사항
이 알고리즘은 리스트를 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 또한 피크 요소는 여러 개 존재할 수 있으며, 위 코드는 그중 가장 먼저 발견된 피크 요소의 인덱스를 반환합니다. 참고로 원본 예제에서는 함수 호출 시 my_array와 array_length라는 변수명이 사용되었지만, 실제 실행 환경에서는 정의된 my_list와 list_length를 전달해야 정상적으로 동작합니다.