본문 바로가기
카테고리 없음

백준 #25206 2023-07-28

by 하타라시 2023. 7. 28.

메소드로 구현하니 속도가 올라갔따..

    float GetGrade(string grade) {
    float data = 0;
    switch(grade){
            case "A+":
                data = 4.5f;
                break;
            case "A0":
                data = 4.0f;
                break;
            case "B+":
                data = 3.5f;
                break;
            case "B0":
                data = 3.0f;
                break;
            case "C+":
                data = 2.5f;
                break;
            case "C0":
                data = 2.0f;
                break;
            case "D+":
                data = 1.5f;
                break;
            case "D0":
                data = 1.0f;
                break;
            case "F":
                data = 0.0f;
                break;
            }
    return data;
}

    float sum = 0;
    float hacSum = 0;
    for(int i = 0; i < 20; i++){
        string put = Console.ReadLine();

        string[] data = put.Split();
        if(data[2].Equals("P")) continue;


        hacSum += float.Parse(data[1]);
        sum += float.Parse(data[1]) * GetGrade(data[2]);
       
    }
    Console.Write(sum / hacSum);

 

이전에 코드

    double sum = 0;
    double hacSum = 0;
    bool result = true;
    for(int i = 0; i < 50; i++){
        string put = Console.ReadLine();
        if(string.IsNullOrEmpty(put)) break;
        string[] data = put.Split();
        if(data[2].Equals("P")) continue;

        switch(data[2]){
            case "A+":
                sum += 4.5f * double.Parse(data[1]);
                break;
            case "A0":
                sum += 4.0f * double.Parse(data[1]);
                break;
            case "B+":
                sum += 3.5f * double.Parse(data[1]);
                break;
            case "B0":
                sum += 3.0f * double.Parse(data[1]);
                break;
            case "C+":
                sum += 2.5f * double.Parse(data[1]);
                break;
            case "C0":
                sum += 2.0f * double.Parse(data[1]);
                break;
            case "D+":
                sum += 1.5f * double.Parse(data[1]);
                break;
            case "D0":
                sum += 1.0f * double.Parse(data[1]);
                break;
            case "F":
                sum += 0.0f * double.Parse(data[1]);
                break;
        }

        hacSum += double.Parse(data[1]);
    }
    Console.Write(sum / hacSum);

어째서지,,,, 흠...

sum += x 하는 연산을 밖으로 빼낸거의 차이가 있긴한데,,, 그거때문인지 ... 메소드화해서 그런건지...

 

switch보다 if가 더 빠른걸로 알고있어서 if로도 해봤는데 68ms 그대로여서 포기했습니다,,, 구글링하러 고고..

 

 

 

 

 

 

-----------

 

 

잘 모르겠지만 

이런 말이 많이보였다..

스위치는 속도가 균등하고 ,, if는 다르다나 뭐라나...

스위치에서 goto문같은걸 봐서 신선했었구,,

 

어셈블리,,, 분석하신 글인데 뭔소린진 모르겠다. 아무튼 적을땐 if쓰고 많을땐 switch를 써야것다..

https://justdoprogram.blogspot.com/2021/12/if-vs-switch-performance-comparision.html