Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 – 리스트에서 피크(peak) 요소 찾기

리스트에서 피크(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를 전달해야 정상적으로 동작합니다.