본문 바로가기
코딩테스트/Softeer

[Softeer][c++] 성적 평균

by 신도리아 2023. 5. 11.

문제 출처: https://softeer.ai/practice/info.do?idx=1&eid=389 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

문제

N명의 학생들의 성적이 학번순서대로 주어졌다.

 

학번 구간 [A, B]가 주어졌을 때 이 학생들 성적의 평균을 구하는 프로그램을 작성하라.

제약조건

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이하이면 정답으로 채점됨.


분석:

단순 구현문제인데,

소수점 반올림과 소수점 출력에서 애를 먹었다.


소스 코드:

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip> 
using namespace std;

int main(int argc, char** argv)
{
	int N, K;
	cin >> N >> K;
	
	vector<int> v;
	for(int i=0; i<N; i++){
		int num;
		cin >> num;
		v.push_back(num);
	}
	
	int a,b,sum=0;
	double average=0;
	for(int i=0; i<K; i++){
		
		cin >> a >> b;

		for(int j = a-1; j<b; j++){
			sum += v[j];
		}
		average = (double)(sum)/(b-a+1);
		
		// 소수점 둘째자리까지 반올림하기 위한 코드
		average *= 100;
		average = round(average);
		average /= 100;

		// 26.67 은 정상 출력되지만, 45.00 or 90.00 값의 경우 45, 90 으로 출력이 됨
        // 자연수 값이더라도 소수점 둘째자리까지(ex. 45.00) 출력하기 위한 방법
		cout << setprecision(2) << fixed; // 소수점 둘째자리까지 고정(fixed)
		cout << average << "\n";
		sum = 0;
		average =0;
	}

	return 0;
}