Lv.0 - 최빈값 구하기_12.31

송철진·2022년 12월 30일
0
post-custom-banner

문제 설명

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

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예

나의 코드

  • [실패] 8,9번 테스트 시 런타임 에러로 통과하지 못함
function solution(array) {
    let arr = []
    let init = 0;
    array = array.sort(function(a,b){return a-b});
    for(let i = 0; i < array.length; i++){
        if(array[i] !== array[i+1]){
            arr.push(array.slice(init,i+1))
            init = i+1
        }
    }
    arr = arr.sort(function(a,b){return b.length-a.length})
    
    return array.length === 1 ? array[0] :
        arr[0].length === arr[1].length ? -1 : arr[0][0]
}
  • 원인: 배열 array 안의 요소가 모두 같은 값일 경우 arr[1]이 undefined가 되므로 arr[1].length을 구할 수 없다.
  • 해결: arr.length > 1 && 라는 조건을 추가했다
function solution(array) {
    let arr = []
    let init = 0;
    array = array.sort(function(a,b){return a-b});
    for(let i = 0; i < array.length; i++){
        if(array[i] !== array[i+1]){
            arr.push(array.slice(init,i+1))
            init = i+1
        }
    }
    arr = arr.sort(function(a,b){return b.length-a.length})

    return array.length === 1 ? array[0] :
    	arr.length > 1 && arr[0].length === arr[1].length ? -1 : arr[0][0]
}

풀이

  1. 배열 array를 오름차순으로 정렬한다
array = array.sort(function(a,b){return a-b});
// [1,3,3,3,2,4] 👉 [1,2,3,3,3,4]
  1. 정렬한 인접한 요소의 값을 비교해서 같은 숫자끼리 하나의 배열로 묶고
    빈 배열arr에 차례로 삽입한다
let arr = []
let init = 0;
for(let i = 0; i < array.length; i++){
	if(array[i] !== array[i+1]){
        arr.push(array.slice(init,i+1))
        init = i+1
    }
}
// [1,2,3,3,3,4] 👉 [[1],[2],[3,3,3],[4]]
  1. 배열 arr을 요소의 길이를 기준으로 내림차순으로 정렬한다.
    즉, arr의 0번째 요소 arr[0]의 요소 arr[0][n]은 최빈값이다.
    편의상 arr[0][0]으로 반환할 것이다
arr = arr.sort(function(a,b){return b.length-a.length})
// [[1],[2],[3,3,3],[4]] 👉 [[3,3,3],[1],[2],[4]]
  1. 단, 입력한 배열 array의 길이가 1이면 array[0]을 반환하고
    최빈값이 둘 이상이면 -1을 반환하고
    그외에는 arr[0][0]으로 반환한다
return array.length === 1 ? array[0] :
	// array = [1] 👉 1
   	arr.length > 1 && arr[0].length === arr[1].length ? -1 :
	// arr = [[1,1,1,1],[2,2,2,2],[3]] 👉 -1
	arr[0][0]
	// arr = [[3,3,3],[1],[2],[4]] 👉 3
profile
검색하고 기록하며 학습하는 백엔드 개발자
post-custom-banner

0개의 댓글