문제
https://school.programmers.co.kr/learn/courses/30/lessons/120812
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
먼저 각 숫자가 몇 번 등장했는지 저장하기 위해 빈도 배열을 만든다.
문제에서 배열의 원소는 0 이상 999 이하이므로 크기가 1000인 배열을 생성한다.
int[] mode = new int[1000];
이후 입력 배열을 한 번 순회하면서 각 숫자의 등장 횟수를 증가시킨다.
for (int i = 0; i < array.length; i++) {
mode[array[i]]++;
}
그다음 mode 배열을 순회하면서 가장 많이 등장한 숫자를 찾는다.
if (max < mode[i]) {
answer = i;
max = mode[i];
cnt = 1;
}
- max : 현재까지의 최대 등장 횟수
- answer : 최빈값
- cnt : 최대 등장 횟수를 가진 숫자의 개수
더 큰 등장 횟수를 발견하면 최빈값과 최대 등장 횟수를 갱신하고, cnt를 1로 초기화한다.
반대로 최대 등장 횟수와 같은 값이 또 나오면 cnt를 증가시킨다.
else if (max == mode[i]) {
cnt++;
}
모든 탐색이 끝난 후 cnt가 2 이상이라면 최빈값이 여러 개라는 의미이므로 -1을 반환한다.
if (cnt > 1)
answer = -1;
코드
class Solution {
public int solution(int[] array) {
int answer = 0;
int cnt = 1, max=0;
int[] mode=new int[1000];
for(int i=0;i<array.length;i++){
mode[array[i]]++;
}
for(int i=0;i<mode.length;i++){
if(max<mode[i]){
answer=i;
max=mode[i];
cnt=1;
}
else if(max==mode[i])
cnt++;
}
if(cnt>1)
answer=-1;
return answer;
}
}'PS > Programmers' 카테고리의 다른 글
| [프로그래머스 Lv.0] k의 개수(Java) (0) | 2026.07.20 |
|---|---|
| [프로그래머스 Lv.0] 중복된 문자 제거(Java) (0) | 2026.07.19 |
| [프로그래머스 Lv.0] 배열 회전시키기(Java) (0) | 2026.07.17 |
| [프로그래머스 Lv.0] 배열 자르기(Java) (0) | 2026.07.16 |
| [프로그래머스 Lv.0] 문자열 정렬하기 (2) (Java) (0) | 2026.07.15 |
댓글