120812. 최빈값 구하기 - map

서진·2023년 4월 12일

programmers

목록 보기
1/33

🔻 최빈값 구하기

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

입출력 예

arrayresult
[1, 2, 3, 3, 3, 4]3
[1, 1, 2, 2]-1
[1]1

👀
파이썬에 더 익숙한지라,, 딕셔너리같은 거 없나 하다가 map이 생각났다.
바로 map을 떠올리지 못했다 😌


[👩🏻‍💻내 코드]

function solution(array) {
  let counting = new Map();
  let max = 0;
  let maxArray = [] //최대값 저장 배열
    
  for (let i of array) {
    if(!counting.has(i)) counting.set(i, 0);
    if(counting.has(i)) counting.set(i, counting.get(i) + 1);
    while(counting.get(i) > max) max++;  // max값 업데이트
  }
    
  for (let [k, v] of counting) {
    if (v === max) maxArray.push(k); //최대값 중복 체크위해 저장
  }

  return maxArray.length === 1? maxArray[0] : -1;
}

✅ map 객체와 메소드들에 대해서 공부

-> map.get()
-> map.set()
-> map.has()
-> map 객체는 그 자체로 for of문에 [key, value]로 순회 가능

const fruits = new Map([
  ['strawberry', '딸기'],
  ['banana', '바나나'],
  ['grape', '포도'],
]);

for (const [key, value] of fruits) {
  console.log(key, value);
}
// "strawberry" "딸기"
// "banana" "바나나"
// "grape" "포도"

[👀 참고용]

function solution(array) {
  let m = new Map();
  for (let n of array) m.set(n, (m.get(n) || 0)+1);
  m = [...m].sort((a,b)=>b[1]-a[1]);
  return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}

💡 || 연산자 / spread 연산자.sort chaining 공부

-> || 연산자

( ___ || 0 ) 일 때 둘 다 0이 아니라면, true인 값을 return

-> [...map].sort((a,b) => b[1] - a[1]);

chaining을 이용해서 sort를 이렇게 쓸 수 있음!! 
profile
🫧 ☁️ 🌙 👩🏻•💻 🌿 🐱 🖱 🍟 🚀 ⭐️ 🧸 🍀 💗

0개의 댓글