Skip to content
🤖 HyoJ's WiKi
About

LeetCode) Majority Element 알고리즘 문제

Algorithm, CodingTest3 min read

169. Majority Element (다수 요소)

  • GitHub 링크: https://github.com/hcgo97/leetcode/tree/master/0169-majority-element
  • 링크: https://leetcode.com/problems/majority-element

문제 설명

크기가 n인 배열의 개수가 주어졌을 때, 다수 요소를 반환합니다.

다수 요소는 ⌊n / 2⌋ 이상 나타나는 요소입니다. 다수 요소는 배열에 항상 존재한다고 가정할 수 있습니다.

Example 1:

  • Input:
    • nums = [3,2,3]
  • Output:
    • 3

Example 2:

  • Input:
    • nums = [2,2,1,1,1,2,2]
  • Output:
    • 2

Constraints:

  • n == nums.length
  • 1 <= n <= 5 * 10^4
  • -10^9 <= nums[i] <= 10^9

풀이 과정

  1. 배열 요소가 1개 밖에 없을 경우의 조건문을 추가한다.

    if len(nums) == 1:
    return nums[0]
  2. sort() 함수로 배열을 정렬한다.

    nums.sort()
  3. 배열의 정중앙 index 를 구한다. 배열을 정렬했으므로 정중앙에는 항상 과반수 이상인 요소가 위치하게 된다.

    index = len(nums) // 2
  4. 배열의 정중앙 index 에 위치한 요소를 return 한다.

    return nums[index]

최종 제출 코드

class Solution(object):
def majorityElement(self, nums):
# 1. 배열 요소가 1개 밖에 없으면 바로 return
if len(nums) == 1:
return nums[0]
# 2. 배열 정렬
nums.sort()
# 3. 정중앙에 위치한 index 구함
index = len(nums) // 2
# 4. 정중앙에 위치한 요소 return
return nums[index]

시간 복잡도

O(n log n)

  • sort() 함수를 사용하여 정렬을 진행하므로 O(n log n) 의 시간 복잡도를 가진다.

문제 풀이 기록

hyoj leet code submit history

다른 풀이 방법

Boyer-Moore Voting 알고리즘을 사용하는 방법 (O(n))

class Solution(object):
def majorityElement(self, nums):
# 과반 요소를 저장하는 변수 초기화
sol = None
# 현재 후보 과반 요소의 등장 횟수 초기화
cnt = 0
for i in nums:
if cnt == 0:
# 현재 후보 과반 요소로 설정
sol = i
# 요소가 현재 후보와 같으면 등장 횟수 증가, 다르면 감소
cnt += (1 if i == sol else -1)
# 과반 요소 반환
return sol
© 2024 by 🤖 HyoJ's WiKi. All rights reserved.
Theme by LekoArts