알고리즘 공부
백준 NBA 농구
컴퓨터과학
2023. 8. 3. 23:43
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;
}