ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ SWEA ] 1204. 1일차 - 최빈수 구하기.java
    Algorithm/SWEA Learn 2023. 3. 22. 16:44

    하루입니다.

     


     

    https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

     

    SW Expert Academy

    SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

    swexpertacademy.com

     

     

    어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.
    이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.
    다음과 같은 수 분포가 있으면,

    10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3

    최빈수는 8이 된다.

    최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).

    [제약 사항]
    학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.
     
    [입력]
    첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
    각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.

    [출력]
    #부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.

    ------------------------------------------------------------------------------------------------------------------------------------

     

     

    깃허브

    https://github.com/mjkim856/Algorithm/blob/main/SWEA/D2/1204.%201%EC%9D%BC%EC%B0%A8%20-%20%EC%B5%9C%EB%B9%88%EC%88%98%20%EA%B5%AC%ED%95%98%EA%B8%B0.java

     

     

    전체코드

    더보기

    import java.util.Scanner;

    class Main {
        public static void main(String args[]) throws Exception {
            Scanner sc = new Scanner(System.in);
            int T;              // T번 반복한다.
            T=sc.nextInt();

            for(int test_case = 1; test_case <= T; test_case++) {
                int caseNum = sc.nextInt();         // 정수 : # 번호를 담는다.
                int [] count = new int[101];        // 정수 배열 : 점수의 갯수를 담는다. 왜 101이냐면 0~100까지이기 때문이다.
                int [] score = new int[1000];       // 정수 배열 : 점수를 담는다. 담기는 건 없으나, 확장성을 위하여 이렇게 정의했다.

                for (int i = 0; i < score.length; i++) {        // 주의점 : 총 1000개가 아닌, 케이스당 1000개이다. (여기서 헷갈렸음)
                    // 총 몇 개인지 모르므로 최대 갯수인 1000개만큼 반복한다.
                    int s = sc.nextInt();                       // 값이 12 23 64 이런 식으로 주어지므로 sc.nextInt()를 사용해서 값을 담는다.
                    count[s]++;                                 // 만약 s가 2점이라면, 배열의 2번째에 담긴다. (배열은 0부터 시작!)
                    // ==> [ 0 0 1 0 

    0 ... ]
                    // 만약 s가 4점이라면, 배열의 2번째에 담긴다.
                    // ==> [ 0 0 1 0 1 ... ]
                    // 만약 s가 2점이라면, 배열의 2번째에 담긴다.
                    // ==> [ 0 0 2 0 0 ... ]
                    // 이런 식으로 1000회 반복된다.
                }

                int max = 0;                                    // 정수 : 최빈값 갯수를 담는다. (97점이 5개라면 5를 담음)
                int result = 0;                                 // 정수 : 최빈 점수를 담는다. (97점이 5개라면 97을 담음)
                for (int i = 0; i < count.length; i++) {        // 101번만큼 반복한다.
                    if (count[i] >= max) {                      // 만약 count의 i번째 값이 max보다 크다면 그 값을 max에 넣는다. (배열의 최댓값 구하는 거!)
                        max = count[i];                         //
                        result = i;                             // i를 (왜 i를 넣냐면 i가 점수니까) 결과에 넣는다.
                    }
                }

                System.out.println("#" + caseNum + " " + result);
            }
        }
    }

     

     

     

Designed by Tistory.