[코테] Softeer Lv.3 - 성적 평균

유정현·2023년 3월 28일
0

코딩테스트 준비

목록 보기
4/6

문제 요약

N명이 학생들의 성적이 주어졌을 때
학번의 구간이 주어지면 그 구간 성적의 평균을 구하기

입력형식

1 ≤ N ≤ 106 인 정수
1 ≤ K ≤ 104 인 정수
1 ≤ Si ≤ 100 인 정수
1 ≤ Ai ≤ Bi ≤ N
첫 번째 줄에 학생 수 N과 구간 수 K가 주어진다.
두 번째 줄에는 학생의 성적 Si (1 ≤ i ≤ N)가 주어진다. i + 2 (1 ≤ i ≤ K)번째 줄에는 i번째 구간 Ai, Bi가 주어진다.

출력형식

i번째 줄에 i번째 구간의 성적평균(소수셋째자리에서 반올림)을 출력한다.
차이가 0.01이하이면 정답으로 채점됨.

해결 방법

  1. 크기 n+1의 전체 배열을 생성하고, i번째 학생의 성적을 인덱스 i에 대입한다.
  2. 입력받은 Ai, Bi에 대해서 인덱스 Ai 부터 시작하여 Bi 까지 1씩 증가하며 성적의 합을 구한다.
  3. 2를 K번 반복한다.
  • 1 : 리스트 생성
	cin >> N >> K;

	// N : 학생 수
	// K : 구간 수

	std_list = new int[N+1]();
	for (i=1; i<=N; i++) {
		cin >> std_list[i];
	}
  • 2 : 구간 내에서 성적의 합 구해서 출력
	void CalcAverage(int from, int to) {
      float sum = 0;
      for (int i=from; i<=to; i++) {
          sum += std_list[i];
      }
      float average = sum / (to - from + 1);
      average = round(100 * average) / 100;
      cout << average << endl;
	}
  • 3 : K번 반복
	for (i=0; i<K; i++) {
		cin >> A >> B;
		CalcAverage(A, B);
	}

얻어가는 것

  • C++ 타입 캐스팅
    int와 int의 계산 -> int
    하나라도 float 포함되면 -> float
int a = 10;
int b = 3;
cout << a/b << endl;	// 3
float c = 10;
cout << c/b << endl;	// 3.3333...
  • C++ 소수점 반올림
    소수점 nn번째 자리까지 반올림하려면, 원하는 숫자에 10n10^n 곱한 다음, round() 함수를 거치고 10n10^n으로 나누기
float a = 1.345798;
cout << round(100 * a) / 100 << endl;	// 1.34
profile
Mechanical Engineering, SKKU

0개의 댓글