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

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

내가 너무 어렵게 푼건가 ..

#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
#include<stack>
using namespace std;

struct Point {
	int i, j, t, cnt, power;
	char c;
};

void Prints(vector<vector<int>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}

void Prints(vector<vector<bool>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<char>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j];
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<vector<char>>>maps, int n, int m, int k) {
	for (int t = 0; t < k; t++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cout << maps[t][i][j];
			}
			cout << endl;
		}
		cout << endl;
	}
	cout << endl;
}

void Prints(vector<vector<vector<bool>>>maps, int n, int m, int k) {
	for (int t = 0; t < k; t++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cout << maps[t][i][j];
			}
			cout << endl;
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<int>line, int n) {
	for (int i = 0; i < n; i++) {
		cout << line[i] << ",";
	}
	cout << endl;
}
void Prints(string str, int n) {
	for (int i = 0; i < n; i++) {
		cout << str[i] << ",";
	}
	cout << endl;
}

bool compares(vector<long long>&a, vector<long long>&b) {
	for (long long i = 1; i < 4; i++) {
		if (a[i] == b[i]) {
			continue;
		}

		//cout << a[i] <<","<< b[i]<<endl;
		return a[i] > b[i];
	}
	return false;
}
struct Data {
	long long index;
	long long value;
};

int main() {
	long long n, k;
	cin >> n >> k;

	vector<vector<long long>>ranks;

	vector<long long>checkr(n, 1);
	for (long long i = 0; i < n; i++) {
		vector<long long>tmpranks;
		for (long long j = 0; j < 4; j++) {
			long long tmp;
			cin >> tmp;
			tmpranks.push_back(tmp);
		}
		ranks.push_back(tmpranks);
	}
	if (n == 1) {
		cout << 1;
		return 0;
	}

	sort(ranks.begin(), ranks.end(), compares);

	vector<Data>ranksData;

	long long cnt = 1;
	bool bCheck = false;
	long long linkcnt = cnt;
	for (long long i = 0; i < ranks.size() - 1; i++) { //0 
		Data d;
		if (ranks[i][1] == ranks[i + 1][1] && ranks[i][2] == ranks[i + 1][2] && ranks[i][3] == ranks[i + 1][3]) {
			d.value = cnt;
			d.index = ranks[i][0];
			ranksData.push_back(d);
			linkcnt++;
			bCheck = true;
		}
		else {
			if (bCheck == true) {
				d.value = cnt;
				d.index = ranks[i][0];
				ranksData.push_back(d);
				bCheck = false;
				cnt = cnt + linkcnt;//2+2
				linkcnt = 1;
				continue;
			}
			d.index = ranks[i][0];
			d.value = cnt;
			ranksData.push_back(d);
			cnt++;
		}
	}
	//last
	if (ranks[ranks.size() - 2][1] == ranks[ranks.size() - 1][1]
		&& ranks[ranks.size() - 2][2] == ranks[ranks.size() - 1][2]
		&& ranks[ranks.size() - 2][3] == ranks[ranks.size() - 1][3]) {
		Data d;
		d.index = ranks[ranks.size() - 1][0];
		d.value = cnt;
		ranksData.push_back(d);
	}
	else {
		Data d;
		if (bCheck == true) {
			d.value = cnt;
			d.index = ranks[ranks.size() - 1][0];
			ranksData.push_back(d);
			bCheck = false;
		}
		else {

			d.index = ranks[ranks.size() - 1][0];
			d.value = cnt;
			ranksData.push_back(d);

		}

	}

	for (long long i = 0; i < ranksData.size(); i++) {
		if (k == ranksData[i].index) {
			cout << ranksData[i].value;
		}
	}



	return 0;
}

'알고리즘 공부' 카테고리의 다른 글

백준 등수 구하기  (0) 2023.08.01
백준 덩치  (1) 2023.07.31
백준 집합  (0) 2023.07.30
백준 줄세우기  (0) 2023.07.30
백준 현수막  (0) 2023.07.30

+ Recent posts