연습장

58. 최빈값 구하기 본문

프로그래머스/0단계

58. 최빈값 구하기

js0616 2023. 8. 19. 18:12

Q. 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

 


 

빈도수를 세는 문제는 객체로 만들어서 풀면 이해하기 편하다.

 

1. 객체로 만든다.

 

빈 객체 dic 를 만들고

배열 array 의 원소가 dic 에 존재 할 경우 해당 value 값을 1 증가

없을 경우 해당 value 값을 1로 만든다.

let array = [1, 2, 3, 3, 3, 4]

let dic = {}
   
for (i of array){
    if(i in dic){
        dic[i] += 1
    }
    else {
        dic[i] = 1
    }
}

console.log(dic) // { '1': 1, '2': 1, '3': 3, '4': 1 }

 

 

 

 

2. 빈도수가 가장 큰 값을 찾는다. 

 

value 가 가장 큰 값을 담을 변수 d_key 와 d_val 을 만들고

for 문을 이용하여 dic 를 돌며 큰값을 찾는다.

// 객체의 value 가 가장 큰 값의 key 와 value
let d_key = 0  // key
let d_val = 0  // value

for(i in dic){
    if(dic[i] > d_val){
        d_val = dic[i]
        d_key = Number(i)
    }
}

 

 

문제의 조건에 따라서 

 

큰값이 2개 이상일경우 아래의 for 문을 이용하여 -1 을 반환하고

 

해당 없을 경우 value 가 가장 큰 값의 key 값이 반환된다. 

    // value 가 가장 큰 값이 2개 이상 일 경우
    // key 가 다른데 value 가 같은 값 이 있는지 확인
   
    for (i in dic){
        if(d_key != i && d_val == dic[i]){
            return -1
        }
    }
   
    return d_key;

 

 


전체 정답 코드

function solution(array) {
    let dic = {}
   
    for (i of array){
        if(i in dic){
            dic[i] += 1
        }
        else {
            dic[i] = 1
        }
    }

    let d_key = 0  // key
    let d_val = 0  // value
   
    for(i in dic){
        if(dic[i] > d_val){
            d_val = dic[i]
            d_key = Number(i)
        }
    }
   
    for (i in dic){
        if(d_key != i && d_val == dic[i]){
            return -1
        }
    }
   
    return d_key;
}

 

'프로그래머스 > 0단계' 카테고리의 다른 글

60. 평행  (0) 2023.08.20
59. 이차원 배열 대각선 순회하기  (0) 2023.08.20
57. 분수의 덧셈  (0) 2023.08.19
56. 간단한 식 계산하기  (0) 2023.07.11
55. 대문자로 바꾸기  (0) 2023.07.11