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
'코테연습 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 > SELECT > 서울에 위치한 식당 목록 출력하기 (0) | 2024.01.26 |
---|---|
코딩테스트 연습 > SELECT > 조건에 부합하는 중고거래 댓글 조회하기 MySQL (0) | 2024.01.26 |
코딩테스트 연습 > SELECT > 오프라인/온라인 판매 데이터 통합하기 MySQL (0) | 2024.01.24 |
코딩 기초 트레이닝 > 전국 대회 선발 고사 (0) | 2024.01.08 |
코딩 기초 트레이닝 > 문자열 묶기 Java #getOrDefault() (0) | 2023.11.20 |