문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
입출력 예
| array | result |
| [1, 2, 3, 3, 3, 4] | 3 |
| [1, 1, 2, 2] | -1 |
| [1] | 1 |
문제 풀이
function solution(array) {
var answer = 0;
var arr = [...new Set(array)]
//new Set 메서드로 원시값(string, number, bigint, bollean, undefined, symbol, null)과 객체 참조, 모든유형의 유일한 값을 저장할 수 있다.
// => 즉, 중복된 값이 있으면 한개만 유일하게 남겨줌(중복허용X)
var count_arr = []
// 반복문을 돌려 arr의 수와 array의 수를 비교해 같으면 count_arr에 할당한다.
for(var i = 0; i< arr.length; i++){
var count = 0
for(var j = 0 ; j<array.length; j++){
if(arr[i] === array[j]){
count++
}
}
count_arr.push(count)
// count_arr 배열안에 할당한다.
}
// count_arr 배열안에서 가장 큰 값을 찾는다.
var max = Math.max(...count_arr)
// 가장 큰 값인 max의 인덱스 번호를 찾는다.
var j = count_arr.indexOf(max)
// 가장 큰값의 위치를 찾아 answer의 값으로 할당한다.
answer = arr[j]
for(var i = 0; i<arr.length; i++){
// count_arr의 숫자중 가장 큰 값과 같고
//i의 값이 j과 다르다면 answer에 -1을 할당하라.
if(count_arr[i] === max && i != j){
answer = -1
}
}
return answer;
}
reduce함수
reduce(func, initialValue)는 배열 요소의 값들을 순차적으로 순회하면서 하나의 값을 만드는 함수다. 초기값 initialValue가 주어지면, 배열의 0번 index 부터 연산을 수행하고, 그 결과를 다음 연산의 인자(accumlator)로 전달한다.
아래 예제는 reduce()로 중복을 제거하는 방법인데, accumulator에 추가 안된 요소라면 추가하고, 그렇지 않으면 추가 하지 않는다. 이것을 첫번째 요소부터 마지막 요소까지 순회하면서 수행한다.
const arr = ['A', 'B', 'C', 'A', 'B'];
const initialValue = []
const newArr = arr.reduce((acc, obj) => acc.includes(obj)
? acc : [...acc, obj],initialValue)
console.log(newArr)
🚀 틀린점이 있어 지적할 사항이 있다면, 피드백해주시면 감사하겠습니다. 😊
'알고리즘' 카테고리의 다른 글
| 구슬을 나누는 경우의 수 - (프로그래머스 코딩테스트 입문) (0) | 2023.01.24 |
|---|---|
| 직각삼각형 출력하기 - (프로그래머스 코딩테스트 입문) (0) | 2023.01.22 |
| 분수의 덧셈 - (프로그래머스 코딩테스트 입문) (0) | 2023.01.16 |
| 문제해결접근법 (0) | 2023.01.14 |
| 객체와 배열의 Big O 표기법 (0) | 2023.01.02 |