๐Ÿ“š ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv0 ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

rigood 2023. 1. 22. 15:07

[์ถœ์ฒ˜] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค https://school.programmers.co.kr/learn/courses/30/lessons/120812?language=javascript 

 

function solution(array) {

// 1. ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
// 2. ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์›์†Œ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.
// 3. ์ตœ๋นˆ๊ฐ’์„ ๊ทธ๋•Œ๊ทธ๋•Œ ๊ธฐ๋กํ•œ๋‹ค.
// 4. ์ตœ๋นˆ๊ฐ’์„ return ํ•œ๋‹ค. (์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉด -1์„ returnํ•œ๋‹ค.)

    // 1. ๋ฐฐ์—ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    let sortedArray = array.sort((a,b)=>a-b);
    
    // 2. ์ฐจ๋ก€๋Œ€๋กœ ์›์†Œ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
    let cnt = 0;
    let beforeNum = -1; // ํ˜„์žฌ ์ˆซ์ž ์ด์ „ ์ˆซ์ž
    let repeatCnt = 0; // ํ˜„์žฌ ๋˜‘๊ฐ™์€ ์ˆซ์ž๊ฐ€ ๋ช‡๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€
    let modeRepeatCnt = 0; // ์ตœ๋นˆ๊ฐ’์ด ๋ช‡๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ๋œ๊ฑด์ง€
    let mode = -1; // ์ตœ๋นˆ๊ฐ’
    let isModeDuplicate = false; // ์ตœ๋นˆ๊ฐ’ ์ค‘๋ณต ์—ฌ๋ถ€    

    while(cnt < array.length){
        // ์ฒ˜์Œ ์„ธ๋Š” ์ˆซ์ž์ด๋ฉด ๋ฐ˜๋ณตํšŸ์ˆ˜ 1
        if(beforeNum !== array[cnt]){
            repeatCnt = 1;
        // ์ด๋ฏธ ์…Œ๋˜ ์ˆซ์ž์ด๋ฉด ๋ฐ˜๋ณตํšŸ์ˆ˜ 1 ์ฆ๊ฐ€
        } else{
            repeatCnt = repeatCnt+1;
        }
        
        // ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉด ์ค‘๋ณต ํ‘œ์‹œ
        if(repeatCnt === modeRepeatCnt){
            if(mode !== array[cnt]){
                isModeDuplicate = true;
            }
        }
        
        // ์ตœ๋นˆ๊ฐ’ ๊ฐฑ์‹ ๋˜๋Š” ๊ฒฝ์šฐ
        if(repeatCnt > modeRepeatCnt){
            mode = array[cnt];
            modeRepeatCnt = repeatCnt;
            isModeDuplicate = false;
        }
        
        beforeNum = array[cnt];
        cnt= cnt+1;
    }
    
    // ์ตœ๋นˆ๊ฐ’ return (์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉด -1 return)
    if(isModeDuplicate) return -1;
    return mode;
}

[์ถœ์ฒ˜] ๋ผ๋งค๊ฐœ๋ฐœ์ž https://youtu.be/wnl3UyLecnc