문제
나의 생각
먼저 카운팅을 할 수 있는 배열을 만들고 난 후에, 입력되는 매개변수 기준으로 카운팅을 한다.
카운팅 된 값에서 가장 큰 값을 기준에 있는 인덱스를 가지고 있고,
가장 큰값을 똑같이 가진 인덱스가 있는지 한번 더 확인한다 라는 생각으로 접근
나의 답안
public static int solution(int[] array) {
int[] a = new int[1000];
for (int i = 0; i < array.length; i++) {
a[array[i]]++;
}
int answer = 0;
int max = 0;
for (int i = 0; i < a.length; i++) {
if (max < a[i]) {
answer = i;
max = a[i];
}
}
int count = 0;
for (int i = 0; i < a.length; i++) {
if (max == a[i]) {
count++;
}
}
return count > 1 ? -1 : answer;
}
다른 답안
초기에 나도 맵 자료구조를 이용한 답안을 준비하다가 값을 가져오는 과정에서 포기하고 for문 방식으로 변경하였는데, 아래 답안은 맵을 이용한 결과를 만들어 답안이다.
map에서 가져올 때 없으면 default 값으로 가져오게 설정하고 아니면 +1을 하여 가져온다.
그 과정에서 이전에 있던 max 값과 같다면 -1 값을 반환하는 방식이다.
하지만 여기서 의문점은 count == maxCount 가 같을 때 -1 반환하는 식에서 같은 빈도(최고 빈도를 말하는게 아님)가 여러개 있는 값들을 어떻게 처리 했냐는 문제가 생기는데, 이건 어떻게 통과가 된 것인지 아직 잘 모르겠다.
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
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;
}
}
'Programmers 문제풀이 > Lv.0' 카테고리의 다른 글
삼각형의 완성조건 (2) (0) | 2023.03.07 |
---|---|
구슬을 나누는 경우의 수 (0) | 2023.03.06 |
평행 (0) | 2023.03.06 |
문자열 계산하기 (0) | 2023.03.06 |
잘라서 배열로 저장하기 (0) | 2023.03.06 |