문제 

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

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

 

출력 

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

 

예제

입력:

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

출력

40.000%
57.143%
33.333%
66.667%
55.556%

 

 

코드

using System;
using System.Collections.Generic; 

class Program
{ 
    static void Main(string[] args) 
    { 
        int total = int.Parse(Console.ReadLine());
     
        for(int i=0; i<total; i++)
        {
            string[] testCase = Console.ReadLine().Trim().Split(); 
            List<int> score = new List<int>();
            int sum = 0;
            int testNum = int.Parse(testCase[0]);
            int index = testNum;
            
            for(int j=1; j<=testNum; j++)
            {
                score.Add(int.Parse(testCase[j]));
                sum += score[score.Count-1];
            }
            score.Sort();
            
            for(int j=0; j<score.Count; j++)
            {
                if(score[j] > (double)sum/testNum) 
                {
                    index = j;
                    break;
                }
            }
            double aboveAvg = Math.Round((double)(testNum-index)/testNum*100, 3);
            Console.WriteLine("{0:#0.000}%", aboveAvg); 
        }
    } 
}



'Coding > BaekJoon' 카테고리의 다른 글

[BaekJoon/JavaScript] 11047. 동전 0  (0) 2021.10.05
[BaekJoon/C#] 15649. N과 M (1)  (0) 2021.10.03
[BaekJoon/C#] 2504. 괄호의 값  (0) 2021.09.25
[BaekJoon/C#] 1920. 수 찾기  (0) 2021.09.25
[BaekJoon/C#] 9012. 괄호  (0) 2021.09.25

 

  -  프로미스는 new Promise로 생성하는데, 인수는 resolve reject

  -  resolve는 성공한 경우, reject는 실패했을 때 실행되는 콜백함수

 

  -  new Promise 생성자가 반환하는 프로미스 객체는 state result를 프로퍼티로 가짐

  -  state는 초기에 pending이었다가 resolve가 호출되면 fulfilled가 되고, result resolve에 전달된 값을 가짐

  -  반면, reject가 호출되면 staterejected가 되고 result reject함수에 전달된 error가 됨

 

  -  then을 이용해서 resolvereject를 처리할 수 있음.

  -  첫 번째 인수는 프로미스가 이행되었을 때 실행되는 함수로, result에는 ‘OK’라는 값이 들어감

  -  두 번째 인수는 프로미스가 거부되었을 때 실행되는 함수로, err에는 error값이 들어감

 

  -  then 이후에 사용할 수 있는 것으로 catchfinally가 있음

  -  catch error가 발생하는 경우, reject인 경우에만 실행됨

  -  finally는 이행이나 거부의 처리가 완료되면 항상 실행됨 (로딩 화면 같은 것을 없앨 때 유용)

 

 

depth가 깊어지면서 콜백을 호출하는 것을 callback hell, 콜백지옥이라고 부름

 

 

프로미스를 사용해서 작성하면 다음과 같아지고, 이렇게 프로미스로 연결되어 있는 것을 Promise chaining(프로미스 체이닝)이라고 함

하지만 이렇게 사용하면 시간이 너무 오래 걸림

  →  Promise.all을 사용하여 시간을 단축시킬 수 있음

 

 

  →  Promise.all을 사용하면 작업을 동시에 시작해서 모든 작업이 완료되면 그 값을 사용할 수 있음

  →  그래서 Promise.all을 사용했을 때 가장 긴 작업인 f23000ms(3)정도 걸렸고, promise로 넘겨준 값들이 배열로 들어옴

  →  그냥 promise chaining으로 실행된 부분은 각 프로미스가 1000ms, 3000ms, 2000ms이기 때문에, 전체 6000ms정도 걸려서 작업이 완료됨

 

하지만 Promise.all은 하나의 작업이라도 reject되면 error가 발생함

 

Promise.racePromise.all이랑 비슷하게 모든 작업이 동시에 시작되지만, 하나라도 완료되면 바로 종료됨

 

 

 

 

 

↓ [코딩앙마] 자바스크립트 중급 강좌 링크

https://www.youtube.com/watch?v=3Ao3OroqQLQ 

 

 

 

Class: ES6에 추가된 스펙

 

e.g.) 생성자 함수와 Class 비교하기

  →  baby 객체는 객체 내부에 showName이 있고, angel 객체는 __proto__ 내부에 showName이 있음

 

 

  →  생성자 함수를 다음과 같이 작성하면 baby 객체는 클래스로 생성된 angel 객체와 같이 showName__proto__ 안에 있음

  →  하지만 for … in문을 통해 객체의 프로퍼티를 출력해보면, baby name, age, showName이 출력되지만, angel name, age만 출력

       그 이유는 클래스의 메소드는 for…in문에서 제외되기 때문

 

  →  생성자 함수와 클래스 모두 객체를 생성할 때 new를 생략하고 실행시키면,

       생성자 함수는 error 없이 baby undefined가 들어가지만,

       클래스는 new 없이 클래스를 실행할 수 없다는 내용의 TypeError가 발생

 

 

클래스 상속

  -  extends 키워드를 사용

             

 

클래스 메소드 오버라이딩(method overriding)

  →  Car를 상속받는 Bmw 클래스 내부에 Car에 이미 정의된 메소드와 동일한 이름의 메소드를 작성하게 되면, Car에서 상속받은 메소드를 덮어쓰게 됨

z4.stop(); // OFF 출력

 

 

  →  부모의 메소드를 사용하면서 확장하고 싶다면 super라는 키워드를 사용하면 됨

z4.stop(); // STOP!

           // OFF 출력

 

 

클래스 생성자 오버라이딩(constructor overriding)

  →  부모 constructor에서 받아온 color undefined가 들어감

 

  →  자식 클래스의 constructor에도 부모와 동일한 인수를 받아와야 제대로 작동함

 

 

e.g.)  자식 클래스에 constructor를 작성하지 않았을 땐

constructor(...args) {
	super(...agrs);
}

  이 부분이 있는 것처럼 작동해서 문제없이 부모 생성자를 받아올 수 있었음

 

 

 

 

 

↓ [코딩앙마] 자바스크립트 중급 강좌 링크

https://www.youtube.com/watch?v=OpvtD7ELMQo 

 

+ Recent posts