프로그래머스 0단계 최빈값 구하기(Map을 활용하여 풀기)

개발프로그·2024년 3월 31일
0

코딩테스트

목록 보기
7/7

지난 글에서 for, if 문으로 최빈값 구하기 문제를 풀었습니다.

이번 글에서는 Map을 활용하려 풀어보려고 합니다. Map을 활용한 풀이와 for, if 문을 활용한 풀이의 차이를 확인하겠습니다.

Map은 여러 구현체의 추상화된 인터페이스입니다. Map이 공통적으로 가져야하는 속성과 메서드들을 미리 정의했다고 보면 됩니다. Map을 구현한 구현체는 HashMap, LinkedHashMap, HashTable 등이 있습니다.

이 문제에서는 순서가 중요하지 않고 성능 차이를 비교하려고 하기 때문에 HashMap을 이용해 보겠습니다. HashMap이 성능이 좋은 이유는 내부적으로 hash function을 사용하여 key를 동일한 형태로 출력(hash)하여 배열같이 인덱스로 접근할 수 있기 때문입니다.

전 글에 HashMap의 시간복잡도가 O(1)이라고 했습니다. 하지만, 밑의 코드를 보시면 한 번의 for문을 사용하기 때문에 전체적인 시간복잡도는 O(n)입니다. 따라서, 성능 차이는 크게 없다고 볼 수 있습니다. 하지만, for, if 문을 사용한 풀이를 보면 코드의 길이가 상대적으로 긴 것을 볼 수 있습니다.

코드를 작성하면 남에게 읽히는 순간이 오게 됩니다. 그만큼 가독성이 중요합니다. 긴 코드보다는 짧은 코드가 가독성 측면에서 유리합니다. 길면 복잡해지고 남이 읽기 힘들어집니다. 문제 해결로 가는 여러 길이 있다면 복잡한 길 보다는 쉬운 길이 더 낫고 지름길이 있다면 그 길로 가는 것이 최선일 것입니다.

import java.util.Map;
import java.util.HashMap;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        int maxNum = 0;
        
        Map<Integer, Integer> map = new HashMap<>();
        
        for (int a : array) {
            int count = map.getOrDefault(a, 0) + 1;
            
            if (count > maxNum) {
                maxNum = count;
                answer = a;
            } else if (count == maxNum) {
                answer = -1;
            }
            
            map.put(a, count);
        }
        
        return answer;
    }
}
profile
신입개발자

0개의 댓글