1204. SW 문제해결 기본 1일차 최빈수 구하기

PJH·2024년 5월 17일

코딩테스트

목록 보기
4/12

어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.

이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.

다음과 같은 수 분포가 있으면,

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

최빈수는 8이 된다.

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

[제약 사항]

학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.

[출력]

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

sol)

/////////////////////////////////////////////////////////////////////////////////////////////  
// 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의  
// 아래 표준 입출력 예제 필요시 참고하세요.  
// 표준 입력 예제  
// int a;  
// double b;  
// char g;  
// String var;  
// long AB;  
// a = sc.nextInt();                           // int 변수 1개 입력받는 예제  
// b = sc.nextDouble();                        // double 변수 1개 입력받는 예제  
// g = sc.nextByte();                          // char 변수 1개 입력받는 예제  
// var = sc.next();                            // 문자열 1개 입력받는 예제  
// AB = sc.nextLong();                         // long 변수 1개 입력받는 예제  
/////////////////////////////////////////////////////////////////////////////////////////////  
// 표준 출력 예제  
// int a = 0;  
// double b = 1.0;  
// char g = 'b';  
// String var = "ABCDEFG";  
// long AB = 12345678901234567L;  
//System.out.println(a);                       // int 변수 1개 출력하는 예제  
//System.out.println(b);                                  // double 변수 1개 출력하는 예제  
//System.out.println(g);                                  // char 변수 1개 출력하는 예제  
//System.out.println(var);                            // 문자열 1개 출력하는 예제  
//System.out.println(AB);                               // long 변수 1개 출력하는 예제  
/////////////////////////////////////////////////////////////////////////////////////////////  
import java.util.Scanner;  
import java.io.FileInputStream;  
  
/*  
   사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.  
   이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.  
 */class Solution  
{  
    public static void main(String args[]) throws Exception  
    {  
       /*  
          아래의 메소드 호출은 앞으로 표준 입력(키보드) 대신 input.txt 파일로부터 읽어오겠다는 의미의 코드입니다.  
          여러분이 작성한 코드를 테스트 할 때, 편의를 위해서 input.txt에 입력을 저장한 후,  
          이 코드를 프로그램의 처음 부분에 추가하면 이후 입력을 수행할 때 표준 입력 대신 파일로부터 입력을 받아올 수 있습니다.  
          따라서 테스트를 수행할 때에는 아래 주석을 지우고 이 메소드를 사용하셔도 좋습니다.  
          단, 채점을 위해 코드를 제출하실 때에는 반드시 이 메소드를 지우거나 주석 처리 하셔야 합니다.  
        */        //System.setIn(new FileInputStream("res/input.txt"));  
       /*          표준입력 System.in 으로부터 스캐너를 만들어 데이터를 읽어옵니다.  
        */        Scanner sc = new Scanner(System.in);  
        int T;  
        T=sc.nextInt();  
       /*  
          여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.  
       */  
        for(int test_case = 1; test_case <= T; test_case++)  
        {  
            int[] score = new int[101];  
            for(int k = 0; k < 1000 ; k++) {  
                int n = sc.nextInt();  
                for (int i = 0; i <= 100; i++) {  
                    if (i == n) {  
                        score[n]++;  
                    }  
                }  
            }  
            int max = 0;  
            int maxIndex = 0;  
            for (int j = 0; j <= 100; j++) {  
                if (score[j] >= max) {  
                    max = score[j];  
                    maxIndex = j;  
                }  
            }  
            System.out.println("#" + test_case + " " + maxIndex);  
        }  
    }  
  
  
  
}

결과

흠. 이번에도 뻘짓했다.
제대로 한 것 같은데 계속 9/10 뜨길래 코드를 유심히 살펴보니..
T = 10
아래에 의미 없는 테스트 케이스 번호가 있어서...
for문 위에 sc.nextInt() 하나 쓰니 바로 풀림;;;

profile
공부내용 대충 끄적거리는 곳/ 머리 박아 가면서 코딩하기

0개의 댓글