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

๋ฌธ์ œํ’€๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฐ์ผ“๋ชฌ

๋ฌธ์ œ) ๋‹น์‹ ์€ ํฐ์ผ“๋ชฌ์„ ์žก๊ธฐ ์œ„ํ•œ ์˜ค๋žœ ์—ฌํ–‰ ๋์—, ํ™ ๋ฐ•์‚ฌ๋‹˜์˜ ์—ฐ๊ตฌ์‹ค์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™ ๋ฐ•์‚ฌ๋‹˜์€ ๋‹น์‹ ์—๊ฒŒ ์ž์‹ ์˜ ์—ฐ๊ตฌ์‹ค์— ์žˆ๋Š” ์ด N ๋งˆ๋ฆฌ์˜ ํฐ์ผ“๋ชฌ ์ค‘์—์„œ N/2๋งˆ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋„ ์ข‹๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ™ ๋ฐ•์‚ฌ๋‹˜ ์—ฐ๊ตฌ์‹ค์˜ ํฐ์ผ“๋ชฌ์€ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์€ ๊ฐ™์€ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฐ๊ตฌ์‹ค์— ์ด 4๋งˆ๋ฆฌ์˜ ํฐ์ผ“๋ชฌ์ด ์žˆ๊ณ , ๊ฐ ํฐ์ผ“๋ชฌ์˜ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ [3๋ฒˆ, 1๋ฒˆ, 2๋ฒˆ, 3๋ฒˆ]์ด๋ผ๋ฉด ์ด๋Š” 3๋ฒˆ ํฐ์ผ“๋ชฌ ๋‘ ๋งˆ๋ฆฌ, 1๋ฒˆ ํฐ์ผ“๋ชฌ ํ•œ ๋งˆ๋ฆฌ, 2๋ฒˆ ํฐ์ผ“๋ชฌ ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋•Œ, 4๋งˆ๋ฆฌ์˜ ํฐ์ผ“๋ชฌ ์ค‘ 2๋งˆ๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 6๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  1. ์ฒซ ๋ฒˆ์งธ(3๋ฒˆ), ๋‘ ๋ฒˆ์งธ(1๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ
  2. ์ฒซ ๋ฒˆ์งธ(3๋ฒˆ), ์„ธ ๋ฒˆ์งธ(2๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ
  3. ์ฒซ ๋ฒˆ์งธ(3๋ฒˆ), ๋„ค ๋ฒˆ์งธ(3๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ
  4. ๋‘ ๋ฒˆ์งธ(1๋ฒˆ), ์„ธ ๋ฒˆ์งธ(2๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ
  5. ๋‘ ๋ฒˆ์งธ(1๋ฒˆ), ๋„ค ๋ฒˆ์งธ(3๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ
  6. ์„ธ ๋ฒˆ์งธ(2๋ฒˆ), ๋„ค ๋ฒˆ์งธ(3๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒ

์ด๋•Œ, ์ฒซ ๋ฒˆ์งธ(3๋ฒˆ) ํฐ์ผ“๋ชฌ๊ณผ ๋„ค ๋ฒˆ์งธ(3๋ฒˆ) ํฐ์ผ“๋ชฌ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•œ ์ข…๋ฅ˜(3๋ฒˆ ํฐ์ผ“๋ชฌ ๋‘ ๋งˆ๋ฆฌ)์˜ ํฐ์ผ“๋ชฌ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค์€ ๋ชจ๋‘ ๋‘ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์˜ˆ์‹œ์—์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์€ 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์ตœ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์„ ๊ฐ€์ง€๊ธธ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์„ ํฌํ•จํ•ด์„œ N/2๋งˆ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. N๋งˆ๋ฆฌ ํฐ์ผ“๋ชฌ์˜ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด nums๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, N/2๋งˆ๋ฆฌ์˜ ํฐ์ผ“๋ชฌ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘, ๊ฐ€์žฅ ๋งŽ์€ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„, ๊ทธ๋•Œ์˜ ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ)

  • nums๋Š” ํฐ์ผ“๋ชฌ์˜ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด 1์ฐจ์› ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • nums์˜ ๊ธธ์ด(N)๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ํ•ญ์ƒ ์ง์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ํฐ์ผ“๋ชฌ์˜ ์ข…๋ฅ˜ ๋ฒˆํ˜ธ๋Š” 1 ์ด์ƒ 200,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๋งŽ์€ ์ข…๋ฅ˜์˜ ํฐ์ผ“๋ชฌ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋„, ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํฐ์ผ“๋ชฌ ์ข…๋ฅ˜ ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’ ํ•˜๋‚˜๋งŒ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

*์ž…์ถœ๋ ฅ ์˜ˆ:

nums result
[3,1,2,3] 2
[3,3,3,2,2,4] 3
[3,3,3,2,2,2] 2

 

 

  ๋‚ด ํ’€์ด   

function solution(nums){
    let answer = 0;
    let selectNum = nums.length/2
    let result = nums.reduce((acc,cur)=>{
        if(acc[cur]){
            acc[cur]++;
        }else{
            acc[cur] = 1;
        }
        return acc
    },{})

    if(Object.keys(result).length >= selectNum){
        answer = selectNum;
    }else {
        answer = Object.keys(result).length;
    }
    return answer;
}

 

  Description  
์ด N๋งˆ๋ฆฌ ์ค‘ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํฌ์ผ“๋ชฌ์˜ ์ˆ˜๋Š” N/2๋งˆ๋ฆฌ(selectNum)์ด๊ณ , ์ข…๋ฅ˜์˜ ์ˆ˜๋Š” X(result)์ด๋‹ค.

๋งŒ์•ฝ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํฌ์ผ“๋ชฌ์˜ ์ˆ˜(selectNum)๊ฐ€ ์ข…๋ฅ˜์˜ ์ˆ˜(result)๋ณด๋‹ค ํฌ๋ฉด ๊ฐ€์žฅ ๋งŽ์€ ์ข…๋ฅ˜๋Œ€๋กœ ํฌ์ผ“๋ชฌ์„ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” '๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํฌ์ผ“๋ชฌ์˜ ์ˆ˜(selectNum)'๊ฐ€ ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ข…๋ฅ˜์˜ ์ˆ˜๊ฐ€(result)๊ฐ€ ๋” ํฌ๋ฉด ๊ฐ€์žฅ ๋งŽ์€ ์ข…๋ฅ˜๋Œ€๋กœ ํฌ์ผ“๋ชฌ์„ ๊ฐ€์ง€๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” '์ข…๋ฅ˜์˜ ์ˆ˜(result)'๊ฐ€ ๋œ๋‹ค.

 

 

 

 

   ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด   

function solution(nums) {
    const noDuplicatePokemon = new Set(nums);
    const pokemonVarietyCount = noDuplicatePokemon.size;
    const pokemonCounts = nums.length;
    return pokemonVarietyCount > pokemonCounts/2 ? pokemonCounts/2 : pokemonVarietyCount;

}

 

  Review  

๋‚˜๋Š” ์ด N๋งˆ๋ฆฌ์˜ ํฌ์ผ“๋ชฌ ๋ฐฐ์—ด(nums)์„ reduceํ•จ์ˆ˜์™€ if๋ฌธ์„ ํ†ตํ•ด ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋กœ ์ •๋ฆฌํ•œ ํ›„, ๊ฐ์ฒด์˜ key๊ฐ’๋“ค(๊ฐ ์ข…๋ฅ˜)์˜ ๊ฐฏ์ˆ˜๋กœ ํฌ์ผ“๋ชฌ ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋‹ค. ๊ทผ๋ฐ ๋‹ค๋ฅธ ๋ถ„์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ๊น new Set( )์œผ๋กœ ๋ฐฐ์—ด์„ Set๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ  size ์†์„ฑ์„ ํ†ตํ•ด ํฌ์ผ“๋ชฌ ์ข…๋ฅ˜์˜ ์ˆ˜(pokemonVarietyCount)๋ฅผ ๊ตฌํ–ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ ๊ฐ™์•„ ํ•œ ์ˆ˜ ๋ฐฐ์› ๋‹ค~!! (โ€ป์ฐธ๊ณ ๋กœ size ์†์„ฑ์€ set๊ฐ์ฒด์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฑฐ ๊ฐ™๋‹ค. ๊ธฐ์–ตํ•˜์ž! mdn๋ฐ”๋กœ๊ฐ€๊ธฐ)