22.12.30. 배열[ ], 문자열보간, Length

김도익·2022년 12월 30일
0

C#

목록 보기
12/29
     <문제4344> : 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다.
     당신은 그들에게 슬픈 진실을 알려줘야 한다.

     <입력> : 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
     둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 
     이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

     <출력> : 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

     <중요한 포인트>
     1. 예를 들어 평균 70점일때 70점인 학생은 평균에 속하지 않는다. 즉 평균 초과값만 평균을 넘는다고 판단해야한다.
     2. 소수점 셋째 자리까지 출력 : F2 사용.
     3. 첫째 줄에 총 몇개의 Line을 뽑아낼지 만들고, 각 줄 첫번째 마다 몇개의 과목을 봤는지 숫자를 정해주고, 숫자만큼 점수를 입력 받아야한다.

    // 첫째줄 C 입력값 작성
    int C = int.Parse(Console.ReadLine());


    //첫째 줄 만큼 문장을 개행해서 만들어줘야한다.
    for (int i = 0; i < C; i++)
    {
        // 각 줄 마다 입력값 받기    
        string[] subject = Console.ReadLine().Split(" ");
        
        int[] score = new int[subject.Length];
        // []안에는 상수만 가능하다. 
        // 그래서 subject.Length를 하면 내가 입력한 개수만큼 길이가 생성된다. 
        // 6개를 입력하면 길이는 6, 7개를 입력하면 길이는 7이 되는것이다.
        // 타입의 개념이 부족해서 헷갈리는 것이다.

        int sum = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
        int realSum = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
        int average = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
        int num = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.
        double result = 0; // 매번 초기화를 시켜줘야 개행되는 값들과 겹치지 않는다.

        // 평균값 찾기
        for (int j = 0; j < subject.Length; j++)
        {
            score[j] = int.Parse(subject[j]);
            sum += score[j]; // 입력 된 값 다 더하기
            realSum = sum - score[0]; // 입력 된 값에서 총 인원수가 저장된 score[0]을 빼주기
            average = realSum / score[0]; // 평균값
        }

        // 평균값 초과된 정수의 개수 찾기
        for(int a = 1; a < subject.Length; a++)
        // 인덱스 0 부터 시작하면 인원수가 포함됩니다. 인원수의 범위는 1000명까지라서 문제가 됩다.
        // 그러니 인덱스 1부터 시작해서 인원수를 입력받는 인덱스 0을 제외시켜줍니다.
        {
            
            if (score[a] > average)
            {
                num++;
            }
           
        }

        // num이 정수라면 0.1 ~ 0.9의 값들은 0이 나옵니다. 왜냐면 정수는 소주점을 다 버립니다. 
        //그래서 double로 형변환 해줘야합니다.
        // 정수는 소주점 밑은 다 버립니다 꼭 기억합시다!!!!!!!
        result = ((double)num / score[0]) * 100;
        Console.WriteLine($"{result:F3}");
    }
profile
고급 개발자가 되고 싶어요!

0개의 댓글