https://school.programmers.co.kr/learn/courses/30/lessons/120812
문제
풀이과정
- 매개변수로 주어진
array
배열에서 중복값을 제거한 배열setArr
선언. setArr
의 길이(=set
의 크기)만큼 반복하면서 매개변수array
를ArrayList
로 변환한list
(Collections
클래스를 사용하기 위함)에서 각각의setArr
의 원소와 일치하는 원소의 개수를result
배열에 담음.max
:result
배열에서 가장 큰 수.result
배열에서max
와 일치하는index
를 가져오고,setArr
에서 해당index
의 값을 가져온 게 최빈값.result
배열에서max
값이 2개 이상이면 -1 리턴.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer, max = 0;
Integer[] arr = Arrays.stream(array).boxed().toArray(Integer[]::new);
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
Set<Integer> set = new HashSet<>(Arrays.asList(arr));
Integer[] setArr = set.toArray(new Integer[0]);
List<Integer> result = new ArrayList();
for(int i=0; i<set.size(); i++) {
result.add(i, Collections.frequency(list, setArr[i]));
}
max = Collections.max(result);
if(Collections.frequency(result, max) >= 2)
answer = -1;
else
answer = setArr[result.indexOf(max)];
return answer;
}
}
다른 사람 코드 분석
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
}
}
- 주어진 매개변수
array
배열의 원소마다count
한 값이 들어가야 하는 것이므로HashMap
을 사용해array
의 원소를key
로, 해당 원소를count
한 값count
를value
로 가지는map
을 생성해 사용.
⇒map.put(number, count);
array
의 길이만큼 for문 순회.int count = map.getOrDefault(number, 0) + 1;
⇒ 첫 번째 매개변수의key
가 매핑되어 있으면 해당key
의value
를 리턴하고, 그렇지 않으면 두 번째 매개변수의 값을 리턴.
ex)int[] array = {1, 2, 3, 3, 3, 4};
- 첫 for문 시작시
map
에는 값이 들어있지 않으므로count = 0 + 1 = 1;
- 반복문을 수행하면서
number
와count
를map
에 추가함.
number가 map에 있으면count = 해당number + 1;
⇒ map에 재할당 - 첫 for문 순회시
maxCount = count = 1;
count
가maxCount(=1)
보다 크면maxCount = count;
answer = number;
- 계속 for문 순회하다가 다른
number
의count
가maxCount
값과 같으면 최빈값이 두 개 이상이 되므로answer = -1;