※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 11946번 문제인 ACM-ICPC이다.
문제는 아래 링크를 확인하자.

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

 

11946번: ACM-ICPC

대회가 끝난 후 팀 별 성적을 순위에 따라 출력한다. 만약 순위가 같으면 팀 번호가 빠른 것을 먼저 출력한다. 각 팀마다 팀 번호, 푼 문제 수, 총 시간을 출력한다.

www.acmicpc.net

문제에서 주어진 것과 같이 각 팀의 푼 문제수와 "총 시간"을 계산하자. 그리고 주어진 우선순위에 맞춰 문제에서 요구하는 대로 출력하는 것으로 문제를 해결할 수 있다.

 

이 과정에서 팀 i가 문제 m을 틀린 횟수 cnt[i][m](단, 이미 맞아서 더 이상 볼 필요가 없을 경우 -1)과 같은 변수를 이용하면 구현을 편리하게 할 수 있다.

 

아래는 제출한 소스코드이다.

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

int N, M, Q;
int cnt[101][16];
int ansP[101], ansC[101];

pair<pair<int, int>, int> ans[100];

bool comp(pair<pair<int, int>, int>& p1, pair<pair<int, int>, int>& p2) {
	if (p1.first.first != p2.first.first) return p1.first.first > p2.first.first;
	if (p1.first.second != p2.first.second) return p1.first.second < p2.first.second;
	return p1.second < p2.second;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M >> Q;
	while (Q--) {
		int t, i, m; string s; cin >> t >> i >> m >> s;
		if (cnt[i][m] < 0) continue;
		if (s == "AC") {
			ansP[i] += cnt[i][m] * 20 + t, ansC[i]++;
			cnt[i][m] = -1;
		}
		else cnt[i][m]++;
	}

	for (int i = 0; i < N; i++) {
		ans[i].first = make_pair(ansC[i + 1], ansP[i + 1]), ans[i].second = i + 1;
	}

	sort(ans, ans + N, comp);

	for (int i = 0; i < N; i++) cout << ans[i].second << ' ' << ans[i].first.first << ' ' << ans[i].first.second << '\n';
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 16209 // C++] 수열 섞기  (0) 2023.09.12
[BOJ 25367 // C++] 너무 시시했다  (0) 2023.09.11
[BOJ 27198 // C++] kex  (0) 2023.09.08
[BOJ 3895 // C++] 그리고 하나가 남았다  (0) 2023.09.07
[BOJ 27285 // C++] L-Board  (0) 2023.09.06

+ Recent posts