본문 바로가기

개발/Algorithm

[Algorithm] C# 속도측정 하는 법 Stopwatch / Python / 백준알고리즘 평균

https://www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

 

사이트에 C# 버그가 있어 정답처리는 되지 않았으나 빠르게 출력을 해야 하는 프로그램이라 시간을 check 하면서 진행했다.

 

 

C#의 시간 Check하는 법은?

 

 - 알고리즘을 풀다보면 코드의 실행시간을 알아야하는 경우가 있다.

이는 코드 작성시, 딜레이가 발생하거나 어느 부분에서 오버해드가 발생하여 시스템을 느리게 하는지 알아내야 하는 경우도 있다. 중간중간 속도를 Check 하고  싶다면 Stopwatch class를 이용해 시간을 측정할 수 있다.

 

 

1
2
3
4
5
6
7
 Stopwatch stopwatch = new Stopwatch(); //객체 선언
    stopwatch.Start(); // 시간측정 시작
 
        //측정하고자 하는거 위, 아래로 start, end!
 
    stopwatch.Stop(); //시간측정 끝
    System.Console.WriteLine(stopwatch.ElapsedMilliseconds);
cs

 

  • Stopwatch 클래스에 start 함수를 호출하면 시간측정을 시작
  • Stopwatch 클래스에 stop 함수를 호출 하면 시간 측정이 끝
  • ElapsedMilliseconds 변수에 측정한 시간이 저장되게 된다.
  • 해당 변수에 값을 출력하면 된다. 시간은 ms단위로 저장이 되기 때문에 만약 초단위로 보고 싶다면 /1000을 하면 된다.



 

그래서 내가 C#으로 푼 소스는 다음과 같다

 


//입력받을 점수의 개수
int cnt = int.Parse(Console.ReadLine());

//점수 입력
var goal = Console.ReadLine().Split(" ").Select(s => double.Parse(s)).ToList();

//점수 정렬
goal.Sort();

//평균점수
double avg = goal.Select(s => s = (s / goal.Last()) * 100).ToList().Average();

//출력
Console.WriteLine(string.Format("{0:0.00000}", avg));

 

 

밑에 내용은 Python으로 푼 소스이다. (python은 정답처리 되었다~)

 

cnt = int(input()) 

lst = list(map(intinput().split(" ")))

lst.sort()

 

result = 0

for i in range(cnt):

    result += (lst[i] / lst[cnt - 1]) * 100 

 

print(result / cnt)