울음참고 개발공부
article thumbnail
728x90

 

 

오랜만에 진행한 코딩테스트.... 

입문 문제 이게 맞나.... ? 3시간 가까이 걸린.... 

 

 

 

 

 

 

각 풀이과정은 주석을 통해 작성했다 

다소 직관적일 수 있다는 점 ㅜㅜ

 

느낀점은 step by step 이 중요하다는 점이다 

손코딩을 통해 실제로 내가 어떻게 비교하는지 로직 생각 -> 코드로 풀어쓰기 

 

 

 


 

 

 

import java.util.*;

class Solution {
    public int solution(int[] array) {
        // 배열이 하나일경우 최빈값 바로 반환 
        if(array.length == 1) return array[0];
        
        Map<Integer, Integer> maxMap = new HashMap<>();
        
        // Step 1: 배열 정렬
        Arrays.sort(array);

        // Step 2: HashMap에 각 숫자의 빈도 계산
        for (int i = 0; i < array.length - 1; i++) {
            int count = 1; // 초기화
            while (array[i] == array[i + 1]) { 
                count++;
                i++;
                if (i + 1 == array.length) break; // 마지막 숫자라면 루프 종료
            }
            maxMap.put(array[i], count); // 숫자와 빈도를 맵에 저장
        }

        // Step 3: 최빈값 찾기
        int maxCount = 1; // 최대 빈도
        int mode = -1; // 최빈값
        boolean isMultiple = false; // 최빈값이 여러 개인지 여부

        // HashMap을 순회하며 최대 빈도와 최빈값을 구함
        for (Map.Entry<Integer, Integer> entry : maxMap.entrySet()) {
            int key = entry.getKey(); // 현재 숫자
            int value = entry.getValue(); // 현재 숫자의 빈도

            // 현재 숫자의 빈도가 기존 최대 빈도보다 큰 경우
            if (value > maxCount) {
                maxCount = value; // 최대 빈도를 갱신
                mode = key; // 최빈값을 갱신
                isMultiple = false; // 최빈값이 갱신되었으므로 중복 상태를 초기화
            } 
            // 현재 숫자의 빈도가 기존 최대 빈도와 같은 경우
            else if (value == maxCount) {
                isMultiple = true; // 최빈값이 여러 개임을 표시
            }
        }

        // 최빈값이 여러 개인 경우 -1 반환
        if (isMultiple) {
            return -1;
        }

        // 최빈값 반환
        return mode;
    }
}
728x90
profile

울음참고 개발공부

@메각이

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