메소드로 구현하니 속도가 올라갔따..
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