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

2852번: NBA 농구

첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득

www.acmicpc.net

실버3 문제인데 .... 왜이렇게 어렵지... 아니면 너무 어렵게 생각한걸까요.. ㅠ
다시 괜찮은 코드들을 확인해봐야겟네요.
뭔가 엄청 시간을 쏟앗네요 ㅠ

#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 s, e, 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 checkmaps(vector<vector<int>>maps, vector<vector<int>>anw, int n, int m) {
	bool bCheck = false;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (maps[i][j] != anw[i][j]) {
				bCheck = true;
				i = n + 1;
				j = m + 1;
				continue;
			}
		}

	}
	return bCheck;

}
bool findstart(vector<vector<int>>maps, vector<vector<int>>anw, int n, int m, int) {
	bool bCheck = false;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (maps[i][j] != anw[i][j]) {
				bCheck = true;
				i = n + 1;
				j = m + 1;
				continue;
			}
		}

	}
	return bCheck;

}

struct Data {
	int index;
	string times;

};
struct GDatas {
	int change;
	int index;
	string times;

};


int main() {
	int n;
	cin >> n;
	int teamscoreA = 0;
	int teamscoreB = 0;
	vector<Data>teamMap;
	map<int, string>saveMap;
	saveMap[1] = "00:00";
	saveMap[2] = "00:00";
	for (int i = 0; i < n; i++) {
		int team;
		cin >> team;


		string str;
		cin >> str;
		Data tmpD;
		tmpD.index = team;
		tmpD.times = str;
		teamMap.push_back(tmpD);
	}
	string alltime = "48:00";
	string allmin = alltime.substr(0, 2);
	string allsec = alltime.substr(3, 4);

	int iallmin = stoi(allmin);
	int iallsec = stoi(allsec);

	Data winertime;
	winertime.index = 0;
	vector<GDatas>gData;
	for (int i = 0; i < teamMap.size(); i++) {
		
		if (teamMap[i].index == 1) {
			teamscoreA++;
		}
		else if (teamMap[i].index == 2) {
			teamscoreB++;
		}

		string min = teamMap[i].times.substr(0, 2);
		string sec = teamMap[i].times.substr(3, 4);

		int imin = stoi(min);
		int isec = stoi(sec);
		//1 : 0
		if (teamscoreA > teamscoreB) {
			if (winertime.index == 1) {
				continue;
			}
			int tmpsec = 0;
			int tmpallmin = iallmin;
			if (iallsec - isec < 0) {
				tmpallmin = tmpallmin - 1;
				tmpsec = (iallsec + 60) - isec;
			}
			else {
				tmpsec = iallsec - isec;
			}
			int tmpmin = tmpallmin - imin;
			string anwmin = "";
			string anwsec = "";
			if (tmpmin < 10) {
				anwmin = "0" + to_string(tmpmin);
			}
			else {
				anwmin = to_string(tmpmin);
			}
			if (tmpsec < 10) {
				anwsec = "0" + to_string(tmpsec);
			}
			else {
				anwsec = to_string(tmpsec);
			}
			winertime.index = teamMap[i].index;
			winertime.times = teamMap[i].times;
			saveMap[1] = anwmin + ":" + anwsec;

		}
		else if (teamscoreA < teamscoreB) {
			if (winertime.index == 2) {
				continue;
			}
			int tmpsec = 0;
			int tmpallmin = iallmin;
			if (iallsec - isec < 0) {
				tmpallmin = tmpallmin - 1;
				tmpsec = (iallsec + 60) - isec;
			}
			else {
				tmpsec = iallsec - isec;
			}
			int tmpmin = tmpallmin - imin;
			string anwmin = "";
			string anwsec = "";
			if (tmpmin < 10) {
				anwmin = "0" + to_string(tmpmin);
			}
			else {
				anwmin = to_string(tmpmin);
			}
			if (tmpsec < 10) {
				anwsec = "0" + to_string(tmpsec);
			}
			else {
				anwsec = to_string(tmpsec);
			}
			winertime.index = teamMap[i].index;
			winertime.times = teamMap[i].times;
			saveMap[2] = anwmin + ":" + anwsec;
		}
		else {

			if (teamMap[i].index == 1) {
				string minB = winertime.times.substr(0, 2);
				string secB = winertime.times.substr(3, 4);
				int iminB = stoi(minB);
				int isecB = stoi(secB);

				int tmpsec = 0;
				if (isec - isecB < 0) {
					imin = imin - 1;
					tmpsec = (isec + 60) - isecB;
				}
				else {
					tmpsec = isec - isecB;
				}
				int tmpmin = imin - iminB;

				//출력
				string anwmin = "";
				string anwsec = "";
				if (tmpmin < 10) {
					anwmin = "0" + to_string(tmpmin);
				}
				else {
					anwmin = to_string(tmpmin);
				}
				if (tmpsec < 10) {
					anwsec = "0" + to_string(tmpsec);
				}
				else {
					anwsec = to_string(tmpsec);
				}
				saveMap[2] = anwmin + ":" + anwsec;
				for (auto iter = saveMap.begin(); iter != saveMap.end(); iter++) {
				
					GDatas tmpD;
					tmpD.change = 2;
					tmpD.index = iter->first;
					tmpD.times = iter->second;
					gData.push_back(tmpD);
				}
			}
			else if (teamMap[i].index == 2) {
				string minA = winertime.times.substr(0, 2);
				string secA = winertime.times.substr(3, 4);
				int iminA = stoi(minA);
				int isecA = stoi(secA);

				int tmpsec = 0;
				if (isec - isecA < 0) {
					imin = imin - 1;
					tmpsec = (isec + 60) - isecA;
				}
				else {
					tmpsec = isec - isecA;
				}
				int tmpmin = imin - iminA;
				
				string anwmin = "";
				string anwsec = "";
				if (tmpmin < 10) {
					anwmin = "0" + to_string(tmpmin);
				}
				else {
					anwmin = to_string(tmpmin);
				}
				if (tmpsec < 10) {
					anwsec = "0" + to_string(tmpsec);
				}
				else {
					anwsec = to_string(tmpsec);
				}
				//합계산
				saveMap[1] = anwmin + ":" + anwsec;
				for (auto iter = saveMap.begin(); iter != saveMap.end(); iter++) {
					
					GDatas tmpD;
					tmpD.change = 1;
					tmpD.index = iter->first;
					tmpD.times = iter->second;
					gData.push_back(tmpD);
				}
			}
			winertime.index = 0;
		}



	}
	int preindex = -1;

	if (teamscoreA > teamscoreB) {
		for (auto iter = saveMap.begin(); iter != saveMap.end(); iter++) {
			GDatas tmpD;
			tmpD.change = 1;
			tmpD.index = iter->first;
			tmpD.times = iter->second;
			gData.push_back(tmpD);
		}
	}
	if (teamscoreA < teamscoreB) {
		for (auto iter = saveMap.begin(); iter != saveMap.end(); iter++) {
			GDatas tmpD;
			tmpD.change = 2;
			tmpD.index = iter->first;
			tmpD.times = iter->second;
			gData.push_back(tmpD);
		}
	}
	map<int, string>anw;
	anw[1] = "00:00";
	anw[2] = "00:00";
	for (int i = 0; i < gData.size(); i++) {
		if (gData[i].change== gData[i].index) {
			string pivmin =anw[gData[i].index].substr(0, 2);
			string pivsec = anw[gData[i].index].substr(3, 4);

			int ipivmin = stoi(pivmin);
			int ipivsec = stoi(pivsec);

			string tmpmin = gData[i].times.substr(0, 2);
			string tmpsec = gData[i].times.substr(3, 4);

			int itmpmin = stoi(tmpmin);
			int itmpsec = stoi(tmpsec);

			if (ipivsec +itmpsec > 59) {
				ipivmin = ipivmin + 1;
				ipivsec =ipivsec + itmpsec;//51 + 10
				ipivsec = ipivsec - 60;//1
			}
			else {
				ipivsec = ipivsec + itmpsec;//51 + 10
			}
			ipivmin = ipivmin + itmpmin;

			string anwmin = "";
			string anwsec = "";
			if (ipivmin < 10) {
				anwmin = "0" + to_string(ipivmin);
			}
			else {
				anwmin = to_string(ipivmin);
			}
			if (ipivsec < 10) {
				anwsec = "0" + to_string(ipivsec);
			}
			else {
				anwsec = to_string(ipivsec);
			}
			anw[gData[i].index] = anwmin + ":" + anwsec;
		}
		

	}
	for (auto iter = anw.begin(); iter != anw.end(); iter++) {
		cout <<  iter->second << endl;
	}
	

	return 0;
}

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

백준 특정거리의 도시 찾기  (0) 2023.08.04
백준 행렬  (0) 2023.08.03
백준 효율적인 해킹  (0) 2023.08.02
백준 그림  (0) 2023.08.02
백준 스위치 켜고 끄기  (0) 2023.08.01

+ Recent posts