안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)
🪅 나의 문제 풀이
[ 테스트 통과 ]
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
int answer = 0;
int max = 0;
// 배열 array를 오름차순 정렬하여 배열의 마지막 요소가 가장 큰 값이 되도록 만들기
Arrays.sort(array);
// max 변수 선언하기
max = array[array.length-1]; // 배열의 요소 중 가장 큰 값을 max 변수에 담아주기
// 배열의 크기가 max +1인 count 배열을 생성 (배열의 크기는 인덱스 0부터 시작하기 때문에)
int count[] = new int[max +1];
for(int i = 0; i < array.length; i++){
count[array[i]]++; // 배열 array의 각 인덱스에 count 수 부여
}
// max 변수 초기화
max = count[0];
for(int i = 1; i < count.length; i++){
if(max < count[i]){ // 현재까지의 최대 빈도수인 max가 현재 인덱스 i의 빈도수가 더 크면 max의 값을 업데이트
max = count[i];
answer = i; // 결과값이 최신 max값인 인덱스 i, 즉 최빈값을 반환
}else if(max == count[i]){ // 빈도수가 같은 숫자가 중복될 경우
answer = -1; // 결과값 -1 반환
}
}
return answer;
}
}
🧸 코드설명
[ 해결 방안 ]
배열을 먼저 sort메서드를 사용하기 위해 Arrays클래스를 import 해줍니다. 그리고 배열을 sort메서드를 이용하여 오름차순으로 정렬합니다. 그럼 가장 큰 수는 마지막 인덱스값이 됩니다. 가장 큰 수를 max변수로 선언해줍니다. 각 수의 count값을 가진 count 배열을 생성해줍니다. 여기서 배열의 크기는 배열의 인덱스를 0부터 세기 때문에 max+1이 됩니다. for 반복문을 통해 array 배열의 길이만큼 배열의 각 요소를 세는 반복문이 실행됩니다. 반복문이 실행된 값들은 count 배열에 담깁니다. max 변수를 초기화 해줍니다. count 배열 요소 중 가장 큰 count 값을 max로 설정하는 조건문을 만들어 count배열의 길이만큼 for 반복문을 실행합니다. 실행된 결과에 따라 answer 값을 출력합니다.
✨ 다른 풀이
풀이1)
import java.util.*; 구문으로 Java의 java.util 패키지를 가져옵니다. 이 패키지는 자료 구조를 다루는 데 필요한 클래스와 인터페이스를 제공합니다. maxCount는 배열내에서 가장 많이 등장한 숫자의 등장 횟수를 저장하는 변수입니다. 초기값을 0으로 설정합니다. answer은 가장 많이 등장한 숫자를 저장하는 변수입니다. 초기값을 0으로 설정합니다.
정수를 키로 가지고 등장 횟수를 값으로 가지는 HashMap 객체 map을 생성합니다. 이 맵은 각 숫자의 등장 횟수를 알아내는데 사용됩니다. 향상된 반복문을 통해 array에 들어있는 원소를 하나씩 대입하고, getOrDefault 메서드를 사용하여 횟수를 가져오고, map을 통해 횟수의 중복 여부를 알아냅니다. 그리고 중복시에는 값을 1 증가시켜 count 및 maxCount값을 업데이트합니다.
등장 횟수를 업데이트한 후, 현재 숫자의 등장 횟수가 maxCount보다 큰 경우, maxCount와 answer를 현재 숫자의 등장 횟수로 업데이트합니다. 만약 현재 숫자의 등장 횟수가 최대 등장 횟수와 같다면(최빈값이 여러개일 경우) answer를 -1로 설정하여 더 이상 가장 많이 등장하는 숫자가 없음을 표시합니다. 모든 처리 과정을 걸쳐 answer에 가장 많이 등장한 숫자가 저장되어 값을 리턴합니다.
+ 아래의 포스팅을 참고하면 좀 더 이해하기 수월합니다.
https://java119.tistory.com/107
풀이2)
그 외의 방법들도 있었는데 기존 풀이1의 방법과 유사한 패턴이라 풀이2까지 소개해드립니다.
+ 좀 더 공부한 후 풀이2는 설명, 분석 추가할 예정
'。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★ > 나의 코딩테스트' 카테고리의 다른 글
[프로그래머스/Java] 코딩테스트 Lv.0 최댓값 만들기(1) (0) | 2023.10.03 |
---|---|
[프로그래머스/Java] 코딩테스트 Lv.0 짝수는 싫어요 (0) | 2023.10.01 |
[프로그래머스/Java] 코딩테스트 Lv.0 배열의 유사도 (0) | 2023.09.26 |
[프로그래머스/Java] 코딩테스트 Lv.0 점의 위치 구하기 (0) | 2023.09.24 |
[프로그래머스/Java] 코딩테스트 Lv.0 각도기 (0) | 2023.09.24 |