๐Ÿ’ซ ETC/Leetcode

Week 1-1. [Array / String] 169. Majority Element

ming412 2023. 8. 23. 23:32

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

โœ๏ธ ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ ์ •๋ฆฌํ•˜๊ธฐ (=์ฒด๊ณ„ํ™”)

https://leetcode.com/problems/majority-element/?envType=study-plan-v2&envId=top-interview-150 

 

Majority Element - LeetCode

Can you solve this real interview question? Majority Element - Given an array nums of size n, return the majority element. The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists

leetcode.com

์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ n์ด๋ผ๊ณ  ํ•  ๋•Œ, ๋ฐฐ์—ด์— n/2๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.
  • ์ž…๋ ฅ
    • nums | int arrray := ์ค‘๋ณต๋œ ์›์†Œ๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ์—ด, | nums | == n
  • ์ถœ๋ ฅ
    • k | int := ๋ฐฐ์—ด์—์„œ ๋ฐ˜ ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๋Š” ์›์†Œ
  • ์กฐ๊ฑด
    • | n | ∈ [1, 5 * 10^4]
    • | nums[i] | ∈ [-10^9, 10^9]

 

๐Ÿ”Ž ์–ด๋–ค ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๊ฐ€?

ํ•ด์‹œ๋งต์„ ์ด์šฉํ•ด ํŠน์ • ์›์†Œ๋ฅผ key๋กœ, ํ•ด๋‹น ์›์†Œ์˜ ๋นˆ๋„์ˆ˜๋ฅผ value๋กœ ์ €์žฅํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ™ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ: ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ

nums์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 50,000์ด๋ฏ€๋กœ for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•ด๋„ ๋œ๋‹ค.

HashMap์„ ์ด์šฉํ•˜์—ฌ ์›์†Œ์™€ ๊ฐ๊ฐ์˜ ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“ ์˜์‚ฌ ์ฝ”๋“œ

hm = ์ˆซ์ž์™€ ๋นˆ๋„์ˆ˜๋ฅผ ๋‹ด์„ ํ•ด์‹œ๋งต

for (0๋ถ€ํ„ฐ, nums ๋๊นŒ์ง€, 1์”ฉ ์ฆ๊ฐ€) {
	key๊ฐ€ i์ธ ์›์†Œ์˜ value๋ฅผ 1 ์ฆ๊ฐ€
}

ํ•ด์‹œ๋งต์—์„œ value๊ฐ€ ๊ฐ€์žฅ ํฐ key๊ฐ’ ๋ฆฌํ„ด

 

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

class Solution {
    public int majorityElement(int[] nums) {
        HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            hm.put(nums[i], hm.getOrDefault(nums[i], 0) + 1);
        }

        int max_value = -1;
        int max_key = -1;
        for (Map.Entry<Integer, Integer> pair : hm.entrySet()) {
            if (pair.getValue() > max_value) {
                max_value = pair.getValue();
                max_key = pair.getKey();
            }
        }
        return max_key;
    }
}

 

๋‚ด ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

๋‹จ์ผ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

 

โœ๏ธ ์„ฑ๋Šฅ ํšŒ๊ณ 

N์€ ์ตœ๋Œ€ 50,000 ์ด๋ฏ€๋กœ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„์ด๋‹ค.

 

๐Ÿ’ก ๋ฌด์—‡์„/์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํ˜„์žฌ ์ฝ”๋“œ๋Š” ํ•ด์‹œ๋งต ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋นˆ๋„์ˆ˜(value)์˜ ์ตœ๋Œ€๋ฅผ ๊ตฌํ•œ ๋’ค ํ•ด๋‹น ์›์†Œ(key)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

๋ฌธ์ œ์—์„œ ๋ฐฐ์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๋Š” ์›์†Œ๋ฅผ ๋ฆฌํ„ดํ•˜๋ผ๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ,

ํ•ด์‹œ๋งต์„ ์ˆœํšŒํ•˜๋‹ค๊ฐ€ ํŠน์ • ์›์†Œ(key)์˜ ๋นˆ๋„์ˆ˜(value)๊ฐ€ n/2 ์ด์ƒ์ด๋ผ๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜์—ฌ ์ˆœํšŒ๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

class Solution {
    public int majorityElement(int[] nums) {
        HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            hm.put(nums[i], hm.getOrDefault(nums[i], 0) + 1);
        }

        int N = nums.length / 2;
        for (Map.Entry<Integer, Integer> pair : hm.entrySet()) {
            if (pair.getValue() > N) {
                return pair.getKey();
            }
        }
        return 0;
    }
}

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

nums ๋ฐฐ์—ด์—์„œ ๋ฐ˜ ์ด์ƒ ํŠน์ • ์›์†Œ๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค๋ฉด, ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ์›์†Œ๋Š” ์ค‘๊ฐ„ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        return nums[n/2];
    }
}

 

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

๊ธธ์ด๊ฐ€ n์ธ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ์˜ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(nlog(n))์ด๋‹ค.

 

๋А๋‚€ ์ 

nums ๋ฐฐ์—ด์—์„œ ๋ฐ˜ ์ด์ƒ ํŠน์ • ์›์†Œ๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค๋ฉด, ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ์›์†Œ๋Š” ์ค‘๊ฐ„ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.

์œ„ ๋ฐœ์ƒ์ด ์ธ์ƒ๊นŠ์—ˆ๋‹ค.

 

๊ฐ ์›์†Œ์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ํ•„์š” ์—†์ด ์ •๋ ฌํ•œ ๋’ค ์ค‘๊ฐ„ ์œ„์น˜์˜ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค.

์ƒ๊ฐํ•ด ๋ณด์ง€ ๋ชปํ•œ ์•„์ด๋””์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๋‘์ž! ๐Ÿ‘