상세 컨텐츠

본문 제목

[TIL#14-1] Study] 코딩 테스트 2

개인 공부/코딩 테스트

by DK9 2023. 11. 2. 09:04

본문

1. 최빈값(=가장 많이 사용한 값) 구하기ver.map

    public static void main(String[] args) {
        System.out.println("Map을 활용해서 숫자 5개를 입력 받아 최빈값 구하기" +
                "\n최빈 값이 두개라면 -1을 출력");

        Map<Integer, Integer> inputList = new HashMap<>();                      // 맵을 만든다
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 5; i++) {
            int input = sc.nextInt();
            inputList.put(input, inputList.getOrDefault(input, 0) + 1);
            // put 은 ( 여기에, 이걸 넣는다)
            // getOrDefault 는 (get 할 것, [get 할 것이 없다면(=null) 이라면 입력할 것] = 실행할 것)
        }

        int max = 0;
        int result = 0;

        for (int inputKey : inputList.keySet()) {       // inputKey 에 KeySet 한다. (Key 값을 Set 하는데 모든  Key 값이 나오도록)
            System.out.println("숫자"+ inputKey+ "을 "+ inputList.get(inputKey)+ "번 입력했습니다.");
            int a = inputList.get(inputKey);
            if (max < a) {                              // 최빈값 1개
                max = a;
                result = inputKey;
            } else if (max == a) {                      // 최빈값 은 횟수를 비교해서 구하니까 횟수가 같으면 최빈값이 2개 이상이다.
                result = -1;
            }
        }
            System.out.println("최빈 값은 " + result);
    }

 

컬렉션 맵을 이용한 최빈값 구하기이다. 만약 최빈값이 2개 이상이면 -1을 반환한다.

  • .map 뿐만 아니라 Java에서 값이 없다라는 말은 0이 아니라 null이다. .getOrDefault를 사용하면서 깨달은 것으로 값이 없으면 1을 준다는 로직을 행하고 싶을 때 그냥 컴퓨터가 인식하게 null에 값을 입혀주기만 하면 된다. 그러므로 1이 아닌 0을 입력하면 된다.
  • 최빈값은 입력한 숫자가 아닌 입력한 횟수를 비교하는 것이다. 그렇기에 max에 입력된 값과 a가 같다면 최빈값이 아니라는 말과 같다.

최빈값 구하기ver.map 을 하면서 약 3시간 정도 고민했다. 그만큼 기본이 정립되지 않았었다는 말인데 그대로 다음 진도로 넘어갔으면 어떤 모습이었을지 눈에 훤하다.

 

이후에 팀원분께 클래스에 관한 짧은 강의를 듣고 다시금 자바 강의들을 살펴보았다. 전보다 훨씬 더 잘 들어왔고 조금 천천히 들으면 강의에서 전달하고자 하는 큰 내용들은 모두 이해할 것 같다.

관련글 더보기