슬기로운슬기
article thumbnail

 

<Question>

<Answer>

import java.util.Arrays;
class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        int save = 0;
        int answerSum = 0;
        int answerNum = array[0];
        int num = array[0];
        for (int i : array) {
            if(num == i) {
                save += 1; // 배열의 이전의 숫자와 같으면 save를 +1 해준다.
            } else {
                if (save > answerSum) { 
                    answerSum = save;
                    answerNum = num;
                } else if (save == answerSum) { // 최빈값이 여러개일경우 
                    answerSum = save;
                    answerNum = -1;
                }
                num = i;
                save = 1;
            }            
        }
        // 마지막 배열의 요소를 비교하기위해서
        if (save > answerSum) { 
            answerSum = save;
            answerNum = num;
        } else if (save == answerSum) {
            answerSum = save;
            answerNum = -1;
        }
        return answerNum;
    }
}

 

 

< 문제 풀이> 

 

1) array 배열의 요소 값을 하나씩 비교하기

- 향샹된 for문 사용 

for (int i: array) {}

 

2) 배열의 요소의 값이 같으면 save를 1씩 추가 해줌

if (num == i) { 
	save += 1; 
}

3-1) 요소의 값이 달라질때

- save의 값과 answerSum의 값을 비교하여 더 큰 값을 저장하고 더 큰 값을 answerSum에 저장, 그 때의 배열 인덱스의 해당하는 요소의 값을 answerNum에 저장

- 최빈값이 여러개 일 때 answerNum에 -1 저장 

else {
    if (save > answerSum) { 
        answerSum = save;
        answerNum = num;
    } else if (save == answerSum) { // 최빈값이 여러개일경우 
        answerSum = save;
        answerNum = -1;
    }
}

3-2) 요소의 값이 달라질때 save의 값은 1로 돌아감

 else { 
 	num = i; 
 	save = 1;
 }

4) 배열의 마지막 인덱스에 해당하는 부분은 for문을 제대로 돌지 않아 저장되지 않기 때문에 else문 안에 있는 if문을 한번 더 반복 

if (save > answerSum) { 
    answerSum = save;
    answerNum = num;
} else if (save == answerSum) {
    answerSum = save;
    answerNum = -1;
}

 

반응형
profile

슬기로운슬기

@스를기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!