-- 문제
https://school.programmers.co.kr/learn/courses/30/lessons/120812
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
-- 최종 풀이
const solution = (array) => {
// 1. 해시테이블 Map 이용
const map = new Map();
// 2. 반복문을 통해각 el 별 등장 횟수 구하기
// 2-1. 해당 el가 map에 존재하는 지 확인
for (let i = 0; i < array.length; i++) {
// 2-1-a. 존재 O => value 1 증가
if (map.has(array[i])) {
let tgVal = map.get(array[i]) + 1;
map.delete(array[i]);
map.set(array[i], tgVal);
}
// 2-1-b. 존재 X => value를 1로 하는 key-value 새로 생성
else map.set(array[i], 1);
}
// 3. map을 순회해 최빈값을 구함
const keys = Array.from(map.keys()); // key에 대한 배열
const values = Array.from(map.values()); // value에 대한 배열
let max = Math.max(...values); // 최빈값
let maxIdx = values.indexOf(max); // values에서 최초로 등장한 최빈값의 인덱스 위치
// 3-1. 최빈값이 2개 이상 존재할 때
for (let i = 0; i < values.length; i++) {
if (maxIdx !== values.lastIndexOf(max)) return -1;
}
// 3-2. 최빈값이 1개만 존재할 때
return keys[maxIdx];
}
-- 피드백
hash map 을 사용하여 key값에 array의 원소를, value에 등장 횟수를 저장하여 풀이하려고 했다.
테스트케이스 1 의 경우, Map : {1 => 1, 2 => 1, 3 => 3, 4 => 1} 이 되었는데
이 과정에서 최빈값을 구하는 주석 3번 과정이 오래 걸렸다.
그래서 구글링을 통해 방법을 찾아나갔다.
++ [1,1,1,2,2] 테케 추가
-- 참고 링크
https://velog.io/@jun094/Hash%EC%99%80-Map
JS Map 과 해시맵
자료구조 Hasp와 JS Map 객체에 대해 정리해보았다.
velog.io
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map/values
(map.values() 와 map.keys() 참고하여, map 객체의 key, value 값을 Array.from 메소드를 통해 배열로 바꾸어 풀었다. 배열로 바꾸어서 머리가 덜 아파졌다.)
Map.prototype.values() - JavaScript | MDN
values() 메서드는 배열의 각 아이템의 값을 순회하는 새로운 맵 반복자 (en-US) 객체를 반환합니다.
developer.mozilla.org
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / JavaScript] 구명보트 (0) | 2024.04.21 |
---|---|
[프로그래머스 / JavaScript] 숫자의 표현 (0) | 2024.04.14 |
[프로그래머스/JavaScript] 분수의 덧셈 (1) | 2023.12.25 |