FireDrago
lv0 - 최빈값 구하기 (자바) 본문
문제설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수배열 array 가 매개변수로 주어질때,
최빈값을 return 하도록 Solution 함수를 완성해보세요. 최빈값이 여러개면 -1을 return 합니다.
입출력 예
| array | result |
| [1,2,3,3,3,4] | 3 |
| [1,1,2,2] | -1 |
| [1] | 1 |
생각정리
1. 배열의 값을 세는 count 배열을 만들어서 array의 값이 index가 되도록 배열을 초기화 하자
int answer = 0;
Arrays.sort(array) // 최댓값이 배열 맨 뒤로 오게 하기 위해 정렬
int [] count = new int [array[array.length-1]+1];
// count 배열의 갯수는 array 배열의 최대값 +1 (0 포함하기 때문에 1증가)
for (int i=0; i<array.length; i++) {
count[array[i]]++;
// array의 값이 등장 할때마다 해당 index가 1씩 증가한다.
2. 이제 count 배열에서 가장 큰 값의 index를 구해야 한다. (빈출값)
외부에서 max 값을 정의하고 max 값이 바뀔때 마다 최빈값을 찾아 저장한다. (for 문 안의 if문 사용)
int answer = 0;
Arrays.sort(array);
int [] count = new int [array[array.length-1]+1];
int max = 0;
for (int i=0; i<array.length; i++) {
count[array[i]]++;
if (max < count[array[i]]) {
max = count[array[i]];
answer = array[i];
}
}
3. 마지막으로 최빈값이 반복되면 -1 을 return 해야 한다.
반복문을 통해 max 값과 일치하는 값이 두번이상 등장하면 -1 을 리턴하도록 함수를 정의한다.
int repeat = 0;
for (int i=0; i<count.length; i++) {
if (max == count[i]) {
repeat++;
}
}
if (repeat >1) {answer = -1;}
return answer;
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer = 0;
Arrays.sort(array);
int [] count = new int [array[array.length-1]+1];
int max = 0;
for (int i=0; i<array.length; i++) {
count[array[i]]++;
if (max < count[array[i]]) {
max = count[array[i]];
answer = array[i];
}
}
int repeat = 0;
for (int i=0; i<count.length; i++) {
if (max == count[i]) {
repeat++;
}
}
if (repeat >1) {answer = -1;}
return answer;
}
}
최종 코드를 완성했다. 잘 돌아가는데 Stream 써서 해결하는 답안도 있었다. stream 잘 쓰고 싶다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| Lv0 - 공던지기 (자바) (0) | 2023.06.08 |
|---|---|
| Lv0 - 팩토리얼 (자바) (0) | 2023.06.07 |
| Lv0 - 약수 구하기 (약수 알고리즘)(자바) (0) | 2023.06.06 |
| Lv0 - 외계행성의 나이 (자바) (0) | 2023.06.06 |
| lv0 - 분수의 덧셈 (자바) (0) | 2023.06.03 |
