최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
0 < array의 길이 < 100
0 ≤ array의 원소 < 1000
array | result |
---|---|
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
입출력 예 | 설명 |
---|---|
입출력 예 #1 | [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다. |
입출력 예 #2 | [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다. |
입출력 예 #3 | [1]에는 1만 있으므로 최빈값은 1입니다. |
풀이
function solution(array) { var answer = 0; array.sort(function(a,b){return a-b}) //오름차순 var obj = { count : 1, value : 1 } //객체 생성 if (array.length === 1) { return array[0] // 배열의 길이가 1이면 배열의 0번째를 반환 } else { var count = 1; //카운트 변수 선언 for (i=0; i < array.length; i++) { if (array[i] === array[i+1]) { count += 1 // 같은 인자가 있으면 카운트 상승 } else{ if (obj.count === count) { obj = {...obj, count : count, value : [obj.value, array[i]] } } // 변수와 기존 obj.count 가 같으면 배열로 변환해버리기 else if (obj.count < count) { obj = {...obj, value : array[i], count : count} } // 변수가 기존 obj.count 보다 크다면! 새 value와 count 넣어주기 else { obj = obj } // 아니면 그냥 obj 그대로 두기 count = 1 // 변수 리셋 } } } answer = typeof obj.value === 'object' ? -1 : obj.value // 배열이라면 최빈값이 여러개이고, number 타입이라면 최빈값이 유일하므로 typeof 로 배열을 찍으면 'object'가 나오는 걸로 삼항연산 return answer; }