최빈값 구하기, Javascript

cptkuk91·2023년 2월 22일
1

Algorithm

목록 보기
145/161
post-custom-banner

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120812

코드

function solution(array) {
    let result = 0;
    
    let tmp = {};

    for(const num of array){
        if(num in tmp){
            tmp[num] += 1;
        } else {
            // 없는 숫자라면 시작값 1을 설정해준다.
            tmp[num] = 1;            
        }
    }
    console.log(tmp);
    
    let maxCount = 0;
    let maxNum = null;
    let sameCount = false;
    
    for(const num in tmp){
        if(tmp[num] > maxCount){
            maxCount = tmp[num];
            maxNum = num;
            sameCount = false;
        } else if(tmp[num] === maxCount){
            sameCount = true;
        }
    }
    
    if(sameCount){
        return -1;
    } else {
        result = parseInt(maxNum);
    }
    
    return result;
}

풀이

우선 tmp라는 객체를 만들어, 각 숫자별 갯수를 확인 하려고 한다. 만약 array 배열 안에, 기존의 숫자가 존재한다면, tmp[num]에 갯수를 추가해준다. 만약 없는 숫자라면 넣어줌과 동시에 1로 표시해준다. 문제 요구사항에 따르기 위해서 최빈값의 갯수를 확인할 maxCount를 선언, 어떤 숫자인지 파악하기 위해서 maxNum를 선언, 마지막으로 같은 숫자가 존재하는지 확인하기 위해서 sameCount를 boolean값으로 선언해줬다. tmp라는 객체에서 하나씩 꺼내서 확인해보자 첫값을 꺼낼 때, maxCount는 0이기 때문에 maxCount = tmp[num]이 들어간다. 이때 maxNum에다가 num을 담아준다. 현재까지는 sameCount가 없기 때문에 sameCount는 계속 false다. 이후에도 tmp[num]과 maxCount를 비교하고, 만약 tmp[num]과 maxCount가 같다면 sameCount만 true로 바꿔준다. 원하는 결과값을 알기위해서 마지막으로 만약 sameCount가 true라면 요구사항에 따라 -1을 반환하고, sameCount가 false라면 maxNum을 반환해주면 된다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글