오늘은 어려워 보였던 문제를 풀려고 한다.
문제
https://www.acmicpc.net/problem/5800
5800번: 성적 통계
첫째 줄에 중덕 고등학교에 있는 반의 수 K (1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 각 반의 학생수 N (2 ≤ N ≤ 50)과 각 학생의 수학 성적이 주어진다. 시험 성적은 0보다 크거나 같고, 100보다
www.acmicpc.net
응??? 그런데... 읽어보니까 생각보다 간단한 문제였다. 반의 수만큼 for문을 돌려주는데 여기서 "Class 반의 번호"를 출력해줘야 하므로 1부터 시작하고, 그 안에서는 배열에 학생수만큼 입력받고 내림차순을 해주면 되겠다. 가장 큰 인접한 점수 차이를 알아내기 위해서는 인덱스를 0부터 n-1 되기 전까지 넣어주어 비교하면 될 것 같다.
#include <iostream>
#include <algorithm>
using namespace std;
int k, n;
int main() {
cin >> k;
for(int j = 1; j <= k; j++){
int p[50];
//입력받기
cin >> n;
for (int i = 0; i < n; i++) {
cin>> p[i];
}
// 내림차순
sort(p, p + n, greater<int>());
int gap = 0;
//가장 큰 인접한 점수 차이
for (int i = 0; i < n-1; i++) {
if (gap < p[i] - p[i + 1]) {
gap = p[i] - p[i + 1];
}
}
// 출력
cout << "Class " << j << "\n" << "Max " << p[0]
<< ", Min " << p[n - 1] << ", Largest gap " << gap << "\n";
}
return 0;
}
음음
이 분은 벡터를 사용하셨다. 그리고 전체적인 흐름은 비슷했다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int K, N;
int x;
int main(int argc, char **argv){
scanf("%d",&K);
for(int i=0; i<K; i++){
int gap = -1; // 오름차순이므로 이전수 - 현재수 < 0 일 수 없다.
vector<int> v;
scanf("%d",&N);
for(int j=0; j<N; j++){
scanf("%d", &x);
v.push_back(x);
}
sort(v.begin(),v.end(), greater<>()); // 내림차순 정렬
for(int j=0; j<N-1; j++){
if(gap < v[j] - v[j+1]){
gap = v[j] - v[j+1];
}
}
printf("Class %d\n", i + 1);
printf("Max %d, Min %d, Largest gap %d\n", v[0], v[N-1], gap);
}
return 0;
}
출처: https://velog.io/@lamknh/C-%EB%B0%B1%EC%A4%80-5800-%EC%84%B1%EC%A0%81-%ED%86%B5%EA%B3%84
그리고 찾아보다보니 동적 배열을 사용해서 delete []로 초기화하신 분을 보았다. 그래서 delete와의 차이가 궁금해서 찾아보았다. 만약 int형 메모리 공간 5개가 필요한 배열 Array가 있다고 해보자. delete Array;를 한다면 그 배열의 첫 주소 딱 하나만 해제하게 될 것이고, delete [] Array;를 하면 int형 메모리 공간 5개를 처음부터 끝까지 해제하게 될 것이라고 한다.
이왕 찾아본 김에...
vector 배열을 비울 수 있는 함수는 Array.clear(),
배열은 fill_n(Array, 배열 크기, 채울 값);을 사용하면 된다.
[참고] https://gerrk.tistory.com/23,
https://yebeen-study-note.tistory.com/38
'백준 > C++' 카테고리의 다른 글
[C++] 백준 2470번 - 두 용액 (2) | 2024.03.01 |
---|---|
[C++] 백준 2822번 점수 계산 (6) | 2023.12.27 |
[C++] 백준 14729번 칠무해 (2) | 2023.12.25 |
[C++] 백준 5576번 콘테스트 (2) | 2023.12.25 |
[C++] 백준 2752번 세수정렬 (2) | 2023.12.23 |