기록하는 공부
[Programmers] 120812 최빈값 구하기 본문
728x90
반응형
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120812
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예

입출력 예 #1
- [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
입출력 예 #2
- [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
입출력 예 #3
- [1]에는 1만 있으므로 최빈값은 1입니다.
풀이
class Solution {
public int solution(int[] array) {
int answer = 0; //최빈값
int max = 0;
int count [] = new int[1000+1]; //값별 개수 카운트 배열
for(int i=0; i<array.length; i++) { //입력받은 배열의 해당하는 count 배열 값을 증가
count[array[i]]++;
if(max < count[array[i]]) { //배열의 값이 max보다 크면 해당 값을 최빈값으로 지정
max = count[array[i]];
answer = array[i];
}
}
int temp = 0; //최빈값이 두개이상인 경우에는 -1 리턴
for(int j=0; j<1001; j++) {
if(max == count[j])
temp ++;
if (temp > 1)
answer = -1;
}
return answer;
}
}
최빈값이란 주어진 데이터 중 가장 많이 중복된 값을 말한다.
제한사항에서 보는 것과 같이 array의 원소의 범위는 0~1000이므로
count라는 배열을 만들어 1~1000의 범위를 지정해준다.
for문을 이용해 입력받은 array 배열의 값에 해당하는 count 배열의 인덱스 값을 증가시킨다.
이때 if문을 이용하여 해당 배열의 값이 max 보다 크면 그 값을 max에 넣고 최빈값으로 지정한다.
이후 계속해서 for문을 돌면서 최빈값이 갱신된다.
만약, 최빈값이 여러개인 경우에는 아래 temp 변수를 이용해
for문을 돌면서 최빈값이 두 개 이상인 경우를 찾고 answer이 -1을 리턴하도록 한다.

728x90
반응형
'Language > Java' 카테고리의 다른 글
Java에서 문자열을 입력받고 대문자/소문자로 변환하여 출력하기(toUpperCase(), toLowerCase()) (0) | 2023.02.21 |
---|---|
Java에서 정수의 최대값이나 최소값 출력하기(Integer.MAX_VALUE, Integer.MIN_VALUE) (0) | 2023.02.19 |
[Programmers] 120808 분수의 덧셈 (0) | 2023.02.19 |