반응형
안녕하세요, 오늘은 프로그래밍과 알고리즘의 흥미진진한 세계에서 매우 중요한 주제인 '보이어-무어 다수결 알고리즘'을 살펴보려고 합니다. 🧐 이 알고리즘은 코딩 인터뷰에서 자주 마주치는 다양한 문제들, 특히 배열에서 가장 많이 등장하는 요소를 찾는 문제를 효율적으로 해결하는 데 큰 도움을 줍니다. 🎓
🧐 Boyer-Moore Majority Vote Algorithm 이란?
- 이 알고리즘은 1981년 Robert S. Boyer와 J Strother Moore가 개발했어요.
- 목적: 주어진 배열에서 과반수를 차지하는 요소를 효율적으로 찾는 것입니다.
- 특징: 배열을 한 번만 순회하면서 과반수 요소를 찾아낼 수 있어요.
🔍 작동 원리
- 변수 설정: '후보 요소(candidate)'와 '카운터(count)' 두 가지 변수를 사용합니다.
- 순회: 배열을 순회하면서 현재 후보와 같은 요소를 만나면 카운터를 증가, 다른 요소를 만나면 카운터를 감소시킵니다.
- 후보 교체: 카운터가 0이 되면 새로운 요소를 후보로 선택합니다.
📈 시간 복잡도와 공간 복잡도
- 시간 복잡도: O(n)
- 배열을 단 한 번만 순회하기 때문에 시간 복잡도는 O(n)입니다. n은 배열의 길이를 의미해요.
- 공간 복잡도: O(1)
- 추가적인 공간을 사용하지 않고, 몇 개의 변수만을 이용하기 때문에 공간 복잡도는 O(1)입니다.
def majority_element(nums):
candidate = None
count = 0
for num in nums:
if count == 0:
candidate = num
count += 1 if num == candidate else -1
return candidate
# Example usage
example1 = [1, 2, 1, 3, 1]
example2 = [2, 2, 1, 1, 2, 2]
example3 = [3, 3, 4, 2, 4, 4, 2, 4, 4]
majority_element_1 = majority_element(example1)
majority_element_2 = majority_element(example2)
majority_element_3 = majority_element(example3)
(majority_element_1, majority_element_2, majority_element_3)
보이어-무어 다수결 알고리즘을 사용하여 세 가지 예제에 대한 결과를 얻었습니다:
- 예제 1 ([1, 2, 1, 3, 1]): 다수의 요소는 1입니다.
- 예제 2 ([2, 2, 1, 1, 2, 2]): 다수의 요소는 2입니다.
- 예제 3 ([3, 3, 4, 2, 4, 4, 2, 4, 4]): 다수의 요소는 4입니다.
🎉 보이어-무어 다수결 알고리즘은 배열에서 과반수 요소를 찾는 매우 효율적인 방법입니다. 특히, 그 효율성은 시간 복잡도 O(n)과 공간 복잡도 O(1)로 나타납니다. 데이터 처리나 알고리즘 문제 해결에 있어 큰 힘을 발휘할 수 있습니다. 💡
반응형
'프로그래밍 언어(Programming Languages) > 코딩 알고리즘' 카테고리의 다른 글
알고리즘 성장 순서: 효율적인 코드를 위한 첫걸음 🚀 (0) | 2025.01.23 |
---|---|
알고리즘 분석이 중요한 이유? 개발자라면 꼭 알아야 할 성능 최적화 비밀! 🚀📊 (1) | 2025.01.23 |
[알고리즘] 알고리즘 분석: 효율성과 복잡성을 이해하는 첫걸음 🧠💻 (0) | 2025.01.22 |
[코딩 알고리즘] BM25: 정보 검색의 핵심 알고리즘을 탐색하다 🚀 (42) | 2024.03.09 |
[코딩 알고리즘] 🚀 투 포인터 기법(Two-Pointer)으로 코딩 인터뷰 정복하기! (96) | 2023.12.22 |