본문 바로가기

Chapter01/고딩데스드

[고딩데스드] 프로그래머스 중복된 숫자 개수, 최빈값 구하기

코딩테스트 연습 > 코딩테스트 입문 > 중복된 숫자 개수

중복된 숫자 개수

 

문제 설명
정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요.

제한사항
1 ≤ array의 길이 ≤ 100
0 ≤ array의 원소 ≤ 1,000
0 ≤ n ≤ 1,000


입출력 예

array n result
[1, 1, 2, 3, 4, 5] 1 2
[0, 2, 3, 4]  1 0

 

class Solution {
    public int solution(int[] array, int n) {
        int count = 0;
        for(int i : array){
            if(i == n){
                count++;
            }
            
        }
        return count;
    }
}

 

 

 


 

 

코딩테스트 연습 > 코딩테스트 입문 > 최빈값 구하기

 

최빈값 구하기


문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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

 

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

class Solution {
    public int solution(int[] array) {
        Map<Integer, Integer> frequencyMap = new HashMap<>();
        
        for(int i : array){
            frequencyMap.put(i, frequencyMap.getOrDefault(i, 0) + 1);   
        }
        
        Optional<Integer> maxKey = frequencyMap.entrySet().stream()
                .max(Comparator.comparing(Map.Entry::getValue))
                .map(Map.Entry::getKey);

        if (maxKey.isPresent()) {
            int maxValue = frequencyMap.get(maxKey.get());
            boolean hasMultipleMaxValues = frequencyMap.values().stream().filter(value -> value == maxValue).count() > 1;

            if (hasMultipleMaxValues) {
                return -1;
            } else {
                return maxKey.orElse(-1);
            }
        } else {
            return -1;
        }
    }
}

 

 

getOrDefault

: 주어진 키에 해당하는 값이 존재하면 해당 값을 반환하고, 그렇지 않으면 지정된 기본값을 반환

사용 예시

Map<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);

int countApple = map.getOrDefault("apple", 0); // "apple"에 해당하는 값이 10이므로 countApple은 10이 됩니다.
int countGrape = map.getOrDefault("grape", 0); // "grape"에 해당하는 값이 없으므로 countGrape은 기본값 0이 됩니다.

이 경우 countApple은 10이 됩니다. "apple" 키에 해당하는 값이 이미 맵에 있기 때문입니다. 그러나 "grape" 키에 해당하는 값은 맵에 없으므로 getOrDefault 메서드는 기본값 0을 반환합니다.

이 메서드는 키가 맵에 존재하지 않을 때 예외가 발생하는 것을 피하고 기본값을 사용하여 안전하게 처리할 수 있도록 합니다.

 

 

 

 

다른사람의 풀이

import java.util.*;
class Solution {
    public int solution(int[] array) {
        int maxCount = 0;
        int answer = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for(int number : array){
            int count = map.getOrDefault(number, 0) + 1;
            if(count > maxCount){
                maxCount = count;
                answer = number;
            }
            else  if(count == maxCount){
                answer = -1;
            }
            map.put(number, count);
        }
        return answer;
    }
}