최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
풀이1) Arrays.sort()를 활용한 풀이
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
int answer = array[0];
// 빈도값을 순서대로 저장하기 위해 배열 정렬
Arrays.sort(array);
int fr[] = new int[array.length];
int max[] = new int[array.length];
int j = 0;
// fr[] : 빈도값을 저장하는 배열
// max[] : 빈도값에 대응하는 숫자를 저장하는 배열
for (int i = 0; i < array.length - 1; i++) {
if (array[i] == array[i + 1]) {
fr[j]++;
max[j] = array[i];
} else {
j++;
}
}
int a = 0;
// 제일 높은 빈도값 fr[a]를 찾아 max[a]를 answer값에 대입
for (int i = 0; i < array.length; i++) {
if (fr[a] <= fr[i]) {
a = i;
answer = max[a];
}
}
// 만약 배열이 1개일 경우
if (array.length == 1) {
answer = array[0];
// 최빈값이 여러개일 경우
} else {
Arrays.sort(fr);
if (fr[array.length - 1] == fr[array.length - 2]) {
answer = -1;
}
}
return answer;
}
}
풀이2) HashMap을 활용한 풀이
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
//확장 for문
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;
}
}
HashMap
데이터를 저장할 때 키(key)와 값(value)가 짝을 이루어 저장
(빈도값과 숫자값을 저장해야되기 때문에 HashMap을 사용)
키 값은 중복될 수 없고 값은 키 값이 다르다면 중복이 가능하다.
java.util.HashMap 클래스를 import
HashMap<key변수, value변수> name = new HashMap< [ 변수, 변수] >( [ capacity, load factor ] );
Map<변수, 변수> name = new HashMap< >();
put 메소드 (get, remove 등등 다양한 메소드가 있음)
hashmap 데이터 넣기
name.put ( value , value )
확장 for문 (JDK 1.5이상)
for(타입 변수명 : 배열 또는 컬렉션) {
//배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀져 변수에 저장된다.
}
getOrDefault()
getOrDefault(Object Key, default value);
'programmers' 카테고리의 다른 글
[JAVA] 문자 반복 출력 toCharArray() (0) | 2024.03.11 |
---|---|
[JAVA] 직각삼각형 출력하기 repeat() (0) | 2024.03.11 |
[JAVA] ★ OX퀴즈 split() (0) | 2024.03.09 |
[JAVA] 종이 자르기 (0) | 2024.03.09 |
[JAVA] 모음 제거 replaceAll() (0) | 2024.03.09 |