반응형
문제
풀이
vector에 구조체를 넣어 풀이했다.
아래는 array에 구조체를 넣어 풀이한 문제이다.
또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽어보시는걸 추천한다! 👍👍
1. vector를 선언하기 위한 구조체(struct) 생성
struct score { // vector 구조체 생성
string name;
int kor, eng, math;
};
2. 구조체 vector 선언
vector<score> v; // 구조체 vector 선언
3. 구조체 이름 설정, 구조체의 각 값에 입력 값 저장
for (int i = 0; i < N; i++) {
cin >> n >> k >> e >> m;
score s; // 구조체의 이름 설정
s.name = n; // 구조체의 각 값에 입력받은 값을 저장
s.kor = k;
s.eng = e;
s.math = m;
v.push_back({ s.name, s.kor, s.eng, s.math }); // vector에 붙임
}
4. 조건에 맞게 정렬
// 사용자 지정 compare
bool compare(score a, score b) {
if (a.kor == b.kor && a.eng == b.eng && a.math == b.math) { // 4. 모든 점수가 같으면,
return a.name < b.name; // 이름이 사전 순
}
else if (a.kor == b.kor && a.eng == b.eng) { // 3. 국어 점수와 영어 점수가 같으면,
return a.math > b.math; // 수학 점수가 감소하는 순서로 (내림차순)
}
else if (a.kor == b.kor) { // 2. 국어 점수가 같으면,
return a.eng < b.eng; // 영어 점수가 증가하는 순서로 (오름차순)
}
else {
return a.kor > b.kor; // 1. 국어 점수가 감소하는 순서로 (내림차순)
}
}
sort(v.begin(), v.end(), compare);
5. 구조체 vector에서 name 값만 출력
for (int i = 0; i < N; i++) {
cout << v[i].name << "\n";
}
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct score { // vector 구조체 생성
string name;
int kor, eng, math;
};
bool compare(score a, score b) {
if (a.kor == b.kor && a.eng == b.eng && a.math == b.math) { // 4. 모든 점수가 같으면,
return a.name < b.name; // 이름이 사전 순
}
else if (a.kor == b.kor && a.eng == b.eng) { // 3. 국어 점수와 영어 점수가 같으면,
return a.math > b.math; // 수학 점수가 감소하는 순서로 (내림차순)
}
else if (a.kor == b.kor) { // 2. 국어 점수가 같으면,
return a.eng < b.eng; // 영어 점수가 증가하는 순서로 (오름차순)
}
else {
return a.kor > b.kor; // 1. 국어 점수가 감소하는 순서로 (내림차순)
}
}
int main() {
int N, k, e, m;
string n;
vector<score> v; // 구조체 vector 선언
cin >> N;
for (int i = 0; i < N; i++) {
cin >> n >> k >> e >> m;
score s; // 구조체의 이름 설정
s.name = n; // 구조체의 각 값에 입력받은 값을 저장
s.kor = k;
s.eng = e;
s.math = m;
v.push_back({ s.name, s.kor, s.eng, s.math }); // vector에 붙임
}
sort(v.begin(), v.end(), compare);
for (int i = 0; i < N; i++) {
cout << v[i].name << "\n";
}
return 0;
}
결과
반응형
'Programming > C++ - 백준' 카테고리의 다른 글
[백준] 1431번 : 시리얼 번호 | vector 구조체 (C++) (2) | 2024.03.18 |
---|---|
[백준] 11656번 : 접미사 배열 | string.substr() 함수를 이용한 '부분 문자열 추출' (C++) (0) | 2024.03.14 |
[백준] 11650번 : 좌표 정렬하기 | Sort 함수와 Compare & Array와 Vector 풀이 (C++) (0) | 2024.03.14 |
[백준] 11931번 : 수 정렬하기 4 (C++) (0) | 2024.03.13 |
[백준] 11866번 : 요세푸스 문제 0 (C++) (0) | 2024.03.13 |
댓글