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

 

 

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

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

 

 

 

 

 

 

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

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

 

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

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

 

 

 


 

 

 

<java />
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

울음참고 개발공부

@메각이

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