리스트에서 서로의 차이가 K보다 작은 인접 요소들을 제거해야 하는 경우, 간단한 반복문과 if 조건문을 활용하면 손쉽게 해결할 수 있습니다.
핵심 아이디어는 먼저 리스트를 오름차순으로 정렬한 뒤, 인접한 두 요소의 차이를 순차적으로 검사하는 것입니다. 차이가 K 미만이라면 해당 요소를 삭제하고, 그렇지 않다면 다음 요소로 인덱스를 이동합니다.
예제 코드
아래는 전체 구현 예시입니다.
my_list = [13, 29, 24, 18, 40, 15]
print("The list is :")
print(my_list)
K = 3
my_list = sorted(my_list)
index = 0
while index < len(my_list) - 1:
if my_list[index] + K > my_list[index + 1]:
del my_list[index + 1]
else:
index += 1
print("The result is :")
print(my_list)실행 결과
The list is : [13, 29, 24, 18, 40, 15] The result is : [13, 18, 24, 29, 40]
코드 설명
정수 요소들로 구성된 리스트를 정의하고 콘솔에 출력합니다.
기준이 되는 임계값 K를 3으로 설정합니다.
인덱스 역할을 할 변수를 0으로 초기화합니다.
sorted함수를 사용해 리스트를 오름차순으로 정렬합니다. 정렬은 인접 요소 간 비교를 가능하게 만드는 필수 전처리 단계입니다.while반복문으로 리스트를 순회하며, 현재 요소와 다음 요소의 차이가 K보다 작으면 다음 요소를del로 삭제합니다.두 요소의 차이가 K 이상이면 인덱스를 1 증가시켜 다음 비교 대상으로 넘어갑니다.
모든 순회가 끝나면 최종 결과 리스트를 콘솔에 출력합니다.
동작 원리
위 예제에서 정렬된 리스트는 [13, 15, 18, 24, 29, 40]입니다. 여기서 13과 15의 차이는 2로 K(=3)보다 작으므로 15가 제거됩니다. 이후 13과 18의 차이는 5로 K 이상이므로 유지되고, 같은 방식으로 18과 24, 24와 29도 모두 차이가 4 이상이므로 그대로 남습니다. 최종 결과는 [13, 18, 24, 29, 40]이 됩니다.
이 알고리즘은 정렬에 O(n log n)의 시간 복잡도를 가지며, 순회 및 삭제 과정은 O(n) 내에서 처리되므로 전체적으로 효율적인 편입니다.