알고리즘

[알고리즘]프로그래머스 - 최빈값 구하기(HashMap을 곁들인)

seulhasony 2023. 5. 29. 14:58

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

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

 

나의 풀이

import java.util.*;
class Solution {
    public int solution(int[] array) {
        int answer = 0;
        HashMap<Integer,Integer> map = new HashMap<>();
        
        if(array.length == 1) {
            return array[0];
        }
        
        for(int num : array){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        int max = 0;
        for(int key : map.keySet()){
            max = (map.get(key) > max) ? map.get(key) : max;
        }
        
        int cnt = 0;
        for(int key : map.keySet()){
            if(max == map.get(key)){
                answer = key;
                cnt++;
            }
        }
        
        if(cnt > 1){
            return -1;
        }
        
        return answer;
    }
}

 

활용한 주요 메소드 정리

메소드 명 설명
getOrDefault() 문자열이나 숫자의 개수를 세는 문제에서 빠지지 않는 hashMap의 중요 메소드이다.
탐색하고자 하는 숫자를 키값으로 넣고 없을 경우는 0을 입력하여
get의 오류를 방지하고 처음 들어오는 값도 초기화 할 수 있고 다음 들어오는 값은
이전 입력한 데이터를 가져오는 것도 가능하다.
keySet() hashMap이 갖고 있는 키들을 불러온다. 데이터들을 탐색할 수 있다.
주로 for문과 함께 쓰인다.

for(int key : map.keySet()){
     //keySet에서 S는 대문자!
}