[c/c++] 백준 5800 (Silver 5)

은동·2023년 1월 17일
0

Baekjoon

목록 보기
7/49

🔨 문제

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

<요약>

중덕 고등학교 각 반의 학생들의 수학 시험 성적이 주어졌을 때, 최대 점수, 최소 점수, (내림차순 정렬 후)점수 차이를 구하는 프로그램을 작성하시오.


🔨 해결방법

  1. 점수를 입력받을 배열과 점수차이를 비교할 배열 두 개 선언
    (사실 점수 차이 비교할 배열은 선언하지 않아도 되는데 왜 했는지 모르겠다.. sort에 미쳤었나)
  2. 이중 for문으로 입력된 반의 수만큼 반의 학생 수와 그들의 성적을 입력 받고 내림차순으로 sort시킴
	sort(arr, arr + m, greater<>());   //arr[0]은 최대값, arr[m-1]은 최소값
  1. 점수 차이는 사실 최댓값 저장할 변수 하나 선언해서 하는게 메모리 효율적으로 좋다. 그렇지만 난 배열을 선언해서 그 차이들을 다 저장하고 또 sort해서 최댓값을 가져왔다 ㅠㅅㅠ

🔨 코드

#include <iostream>
#include <algorithm>
using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n,m;
	cin >> n;
	int arr[50] = { 0 }, brr[50] = { 0 };
	for (int i = 1; i <= n; i++) {
		cin >> m;
		for (int j = 0; j < m; j++) {
			cin >> arr[j];
		}
		sort(arr, arr + m, greater<>());
		for (int j = 0; j < m - 1; j++) {
			brr[j] = arr[j] - arr[j+1];
		}
		sort(brr, brr + (m - 1));
		cout << "Class " << i << '\n';
		cout << "Max " << arr[0] << ", Min " << arr[m-1] << ", Largest gap " << brr[m-2]<<'\n';
	}

	return 0;
}
profile
자자 선수입장~

0개의 댓글