문제
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
array | result |
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
코드
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer = 0;
Arrays.sort(array); // 체크할 배열의 크기를 알기 위해
int size = array[array.length-1]+1; // 마지막 값(가장 큰 값) + 1의 크기로 배열생성
int[] check = new int[size]; // 빈도 수 세기
int max = 0; // 가장 많은 빈도 수 체크
int count = 0; // 가장 많은 빈도 수가 두개 이상인지 체크
for(int i = 0; i < array.length; i++)
{
check[array[i]]++;
}
for(int i = 0; i < size; i++)
{
if(check[i] >= max)
{
max = check[i];
answer = i;
}
}
for(int i = 0; i < size; i++)
{
if(check[i] == max)
{
count++;
if(count > 1)
{
answer = -1;
break;
}
}
}
return answer;
}
}
풀이
최빈값이란
나온 횟수가 가장 많은 값을 말한다.
check 배열을 만드는 이유
이 배열의 주소를 array 의 값이라고 생각하고
주소에 그 값이 나올때마다 1을 더해준다.
sort()한 이유는
check 배열의 사이즈를 알기 위해서이다.
array 배열에 포함 되어 있는 숫자가 check 배열의 주소값과 맞추기 위해서
array 배열 내에 가장 큰 값을 알아내기 위해서다.
int size = array[array.length-1]+1;
여기서 +1을 한 이유는
조건에서 원소값이 0부터 시작할 수 있다는 것과
값과 주소를 일치하기 위해서다.
(이렇게 하지 않을 경우 배열은 0부터 시작하기 때문에 일치하지 않는다.)
그런 준비가 끝나면 빈도 수를 check 배열에 저장하면서
최대 빈도수(max)를 찾는다.
그 후 최대 빈도수(max)와 같은게 몇개 인지 센다.(count)
그 수(count)가 1이면 answer에 최대 빈도값을 출력,
그 수가 2 이상이면 -1을 출력한다.
728x90
'프로그래머스 > Lv.0' 카테고리의 다른 글
프로그래머스 > 구슬을 나누는 경우의 수 - JAVA (2) | 2022.12.23 |
---|---|
프로그래머스 > 코딩테스트 입문 > 공 던지기 - JAVA (0) | 2022.12.23 |
프로그래머스 > 코딩테스트 입문 > 다음에 올 숫자 - JAVA (0) | 2022.12.17 |
프로그래머스 > 코딩테스트 입문 > 분수의 덧셈 - JAVA (0) | 2022.12.16 |
프로그래머스 > 코딩테스트 입문 > 옹알이(1) - JAVA (2) | 2022.12.15 |