🗣️ 메모
로직 생각 중...
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/011.gif)
✏️ [최빈값 구하기]
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
array | result |
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
입출력 예 설명
입출력 예 #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입니다.
※ 공지 - 2022년 10월 17일 제한 사항 및 테스트케이스가 수정되었습니다.
🔥 TRY #1 실패 실패
👉🏻 이중 포문을 돌며 배열 내의 공통된 숫자를 찾는다
👉🏻 해당 숫자가 몇 번 뽑혔는지 비교를 어떻게 하지...? 음
class Solution {
public int solution(int[] array) {
int answer = 0;
int num = 0;
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array.length; j++) {
if(array[i] == array[j]) {
num++;
}
}
}
return answer;
}
}
🔥 230101 TRY #2 실패
👉🏻 배열을 정렬한다 / 성공
👉🏻 이제 중복된 수가 있다면 해당 배열의 이전 값과 똑같을 것(i+1로 했다가 아웃오브바운즈 오류 남)
👉🏻 중복된 수를 담을 새로운 int 배열을 만든다 / 중복된 수를 담은 배열 잘 뽑힘
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
int answer = 0;
int mode = 0; // 최빈값
int[] index = new int[array.length];
Arrays.sort(array); // 배열 정렬
// 만약 같은 수가 있다면 해당 배열의 다음 순서가 같은 수일 것
for(int i = 1; i < array.length; i++) {
if(array[i] == array[i-1]) {
index[i] = array[i]; // 같은 수가 있는 것만 index 배열에 담김
}
}
for(int j = 0; j < index.length; j++) {
System.out.print(index[j] + " ");
}
return answer;
}
}
👉🏻 그럼 이제...... 인덱스에서 0이 아닌 값을 찾고, 해당 수가 몇 개인지를 찾아서 그 수가 2개 이상이면 -1, 아니면 해당 수를 뽑아야 하는데
👉🏻 이러면 인덱스에 한 번 더 넣어 준 의미가 있나? 바로 뽑을 수 있는 거 아닌가?
🎉🎊💫✨⚡️⭐️🌟 [실행 결과]
코드 블록
출처: 프로그래머스 코딩 테스트 연습,https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr