-

[BOJ]10825 본문

Algorithm/Baekjoon

[BOJ]10825

Boogallee 2020. 3. 10. 22:10

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

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.

www.acmicpc.net

 

만약 입력이

 

"ABC 10 20 30" 으로 들어 온다면?

 

scanf("%s %s %s %s", a, b, c, d) or cin >> a>> b >> c >> d 로 처리 가능!

 

//cout << v[i].name << endl; --> 시간초과
//cout << v[i].name << "\n"; --> 패스
printf("%s\n", v[i].name.c_str());

 

endl이 그만큼 느리다는 것!

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <algorithm>
using namespace std;


struct info {
	string name;
	int K;
	int E;
	int M;
};

vector<info> v;
int N;

bool F(info a, info b) {
	if (a.K == b.K) {
		if (a.E == b.E) {
			if (a.M == b.M) {
				return a.name < b.name;  // 오름 차순
			}
			else
				return a.M > b.M; // 내림 차순
		}
		else {
			return a.E < b.E;
		}
	}
	else {
		return a.K > b.K;
	}

}


int main() {
	ios::sync_with_stdio(false);

	cin >> N;

	for (int i = 0; i < N; i++) {
		string name;
		string k;
		string e;
		string m;
		//scanf("%s %s %s %s", name, k, e, m);
		//printf("%s %s %s %s", name, k, e, m);

		cin >> name >> k >> e >> m;
		v.push_back({ name,atoi(k.c_str()),atoi(e.c_str()),atoi(m.c_str()) });

	}

	sort(v.begin(), v.end(), F);

	for (int i = 0; i < N; i++) {
		//cout << v[i].name << endl; --> 시간초과
		//cout << v[i].name << "\n"; --> 패스
		printf("%s\n", v[i].name.c_str());
	}

	return 0;
}

'Algorithm > Baekjoon' 카테고리의 다른 글

[BOJ]1431 - Sort  (0) 2020.03.12
[BOJ]10814-Sort  (0) 2020.03.12
[BOJ]11004 - 퀵소트/퀵셀렉션/머지소트  (0) 2020.03.09
[BOJ]2136_DFS  (0) 2019.07.10
1890 점프  (0) 2018.02.12
Comments