본문 바로가기

Java/프로그래머스

[JAVA] 프로그래머스 - 최빈값 구하기

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

정답

 

import java.util.*;

class Solution {
    public int solution(int[] array) {
        HashMap<Integer,Integer> map = new HashMap<>();
        
        for(int num : array)
        {
            map.put(num, map.getOrDefault(num,0)+1);
        }
        
        List<Integer> keySet = new ArrayList<>(map.keySet());
        
        //value를 기준으로 내림차순으로 정렬 
        List<Map.Entry<Integer,Integer>>list = new ArrayList<>(map.entrySet());
        list.sort((e1,e2)-> e2.getValue().compareTo(e1.getValue()));
        
        //최빈값이 중복되는지 확인
        if(list.size()>1 && list.get(0).getValue().equals(list.get(1).getValue()))
        {
            return -1;
        }
        else
        {
            return list.get(0).getKey();
        }
    }
}

 

 

다른 사람의 풀이 

 

 

import java.util.*;
class Solution {
    public int solution(int[] array) {
        int maxCount = 0;
        int answer = 0;

        Map<Integer, Integer> map = new HashMap<>();

        // getOrDefault : 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
        // getPrDefault(Object key, V DefaultValue)
        // 매개변수 : 이 메서드는 두개의 매개변수를 허용
        // key : 값을 가져와야 하는 요소의 키
        // defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
        // 반환값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환

        for(int number : array) {
            int count = map.getOrDefault(number, 0) + 1;

            if(count > maxCount) {
                maxCount = count;
                answer = number;
            }

            else if(count == maxCount) {
                answer = -1;
            }

            map.put(number, count);
        }

        return answer;
    }
}