๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/LeetCode

[LeetCode] Reduce Array Size to The Half

๋ฌธ์ œ๋งํฌ

 

Reduce Array Size to The Half - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

๋ฐฐ์—ด์ด ์ฃผ์–ด์งˆ๋•Œ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์œ ์ผํ•œ ์š”์†Œ ( [3,3,3,3,3,4,4,4,5,5] ==> [3, 4, 5] )๋ฅผ ๊ตฌํ•˜๊ณ 
์›๋ณธ ๋ฐฐ์—ด์—์„œ ์œ ์ผํ•œ ์š”์†Œ์™€ ๊ฐ™์€ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ
์ œ๊ฑฐํ•œ ๋ฐฐ์—ด์ด ์›๋ณธ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์˜ ์ ˆ๋ฐ˜๋ณด๋‹ค ์ž‘์•„์งˆ ๋•Œ ์ œ๊ฑฐํ•œ ์œ ์ผํ•œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. (์œ ์ผํ•œ ์š”์†Œ๋Š” ์ตœ์†Œ๋กœ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.)

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์ฃผ์–ด์ง„ ์›๋ณธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๊ฐ™์€ ์š”์†Œ๊ฐ€ ๋งŽ์€ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋งŽ์€ ์š”์†Œ๋ถ€ํ„ฐ ์ง€์šฐ๋ฉด ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•  ๋“ฏ ํ–ˆ๋‹ค.
(ex => [5, 5, 3, 2, 6, 3, 3, 1, 3]์„ [3, 3, 3, 3, 5, 5, 2, 1] ์ˆœ์„œ๋กœ ์ •๋ ฌ)

ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์—์„  ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. (์žˆ์„์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ..)

๋•Œ๋ฌธ์— HashMap์„ ์‚ฌ์šฉํ•˜์—ฌ value๊ฐ€ ๊ฐ€์žฅ ํฐ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค.


๋จผ์ € Map ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ key, ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ value๋กœ ์ฑ„์šด๋‹ค.
arr.forEach(e => {
    map.has(e) ? map.set(e, map.get(e) + 1) : map.set(e, 1);
})โ€‹

 


๊ทธ๋ฆฌ๊ณ  map์˜ value๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ฐฐ์—ด์„ ๊ตฌํ•œ๋‹ค.
const sortedValues = [...map.values()].sort((a,b) => b - a);โ€‹

 


๋งˆ์ง€๋ง‰์œผ๋กœ sum ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  values์˜ ์ฒซ ์š”์†Œ๋ถ€ํ„ฐ ๋”ํ•œ ๋’ค, 
๋งŒ์•ฝ arr / 2๋ณด๋‹ค sum์ด ์ปค์ง€๋ฉด ๋ฉˆ์ถ”๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
for(let value of sortedValues){
    sum += value;
    output++;
    if(sum >= baseSize / 2){
        break;
    }
}โ€‹



๋งŒ์•ฝ ์ด๋•Œ ์ œ๊ฑฐํ•œ ์š”์†Œ์˜ ์Œ์„ ์ฐพ๊ณ  ์‹ถ์œผ๋ฉด map.values๊ฐ€ ์•„๋‹ˆ๋ผ map.entries๋กœ key์™€ value๋ฅผ ๋ชจ๋‘ ๊ตฌํ•˜๊ณ 
output์— key๋ฅผ pushํ•˜๋ฉด ๋œ๋‹ค.

 

/**
 * @param {number[]} arr
 * @return {number}
 */
var minSetSize = function(arr) {
    const baseSize = arr.length;
    const map = new Map();
    let output = 0;
    let sum = 0;
    
    arr.forEach(e => {
        map.has(e) ? map.set(e, map.get(e) + 1) : map.set(e, 1);
    })
    
    const sortedValues = [...map.values()].sort((a,b) => b - a);
    
    
    for(let value of sortedValues){
        sum += value;
        output++;
        if(sum >= baseSize / 2){
            break;
        }
    }
    
    return output;
};

'์ฝ”๋”ฉํ…Œ์ŠคํŠธ > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[LeetCode] Numbers With Same Consecutive Differences  (0) 2022.09.03
[LeetCode] Rotate Image  (0) 2022.08.30
[LeetCode] Unique Morse Code Words  (0) 2022.08.17
[LeetCode] Combination Sum IV  (0) 2022.08.05
[LeetCode] My Calendar I  (0) 2022.08.03