본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.0

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

by 코딩하는 흰둥이 2023. 3. 18.
반응형


 

  • 내 풀이
import java.util.*;
class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        // 같은 숫자가 있을때 + 할 변수
        int count = 0;
        
        int num = 0;

		// 매개변수의 개수를 더하기 위한 HashMap
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int a : array){
        	// map에 a라는 key의 여부 확인
            if (!map.containsKey(a)){
                count = 0;
                // 한번 더 array를 반복하면서 자신을 포함한 값을 count함
                for(int b : array){
                    if (a == b){
                        count++;
                        // 반복되는 수 중에 자신의 key가 같으면 +된 count를 넣는 방식
                        map.put(a, count);
                    }
                }
            }

		// map에 넣은 키들의 개수를 확인
        for (int a : map.keySet()){
            if (map.get(a) > num){
            	// 매개변수의 값
                num = map.get(a);
                // 매개변수 키값
                answer = a;
            }else if(map.get(a) == num){ // 개수가 같다면 최빈값이 여러개인 경우
                answer = -1;
            }
        }
        return answer;
    }
}

 

 

  • 다른 사람 풀이
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;
    }
}

다른 분들은 map.getOrdefault라는 메서드를 사용하였다

 

map.getOrdefault(key값 , default값)는 key의 값이 있으면 key의 값을 없다면 default 값을 반환해준다

풀이에서는

for문을 이용하여 해당 key값을 넣고 값이 없으면 0 이지만 개수를 구하는 중이기 때문에 +1

key값이 있다면 key의 개수를 가져오고 거기에 +1 을해주는 식이다.

        String[] people = {"A", "B", "B", "C", "D", "E"};
        Map<String, Integer> map = new HashMap<>();
        for(String a : people){
            map.put(a, map.getOrDefault(a, 0) + 1);
        }
        System.out.println(map); 
        // {A=1, B=2, C=1, D=1, E=1}

댓글