✨JSY
article thumbnail

-- 문제

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

 

profile

✨JSY

@JUNSANG YOO

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!