카테고리 없음
[알고리즘] 백준 9017 크로스 컨트리 c++ 예외처리
때려쳐아니때려치지마
2024. 10. 26. 19:54
반응형
https://www.acmicpc.net/problem/9017
풀이 과정
1. 인원수를 산정 - 6명이 되는 팀만 남김
2. 해당 팀의 점수 목록을 저장
3. 정리된 팀을 foreach 돌려서 작은 점수인 팀을 승리로 결정
// bj9017.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main()
{
int case_num;
cin >> case_num;
for (int i = 0; i < case_num; i++)
{
int num, team_idx;
cin >> num;
// 팀별 인원수 산정
vector<int> teams;
map <int, int> each_team_size;
for (int j = 0; j < num; j++)
{
cin >> team_idx;
teams.push_back(team_idx);
each_team_size[team_idx]++;
}
// 인원수 비교 후 점수 리스트 축적
int rank = 1;
map <int, vector<int>> each_team_rank;
for (int k = 0; k < num; k++)
{
if (each_team_size[teams[k]] == 6)
{
each_team_rank[teams[k]].push_back(rank);
}
else
{
continue;
}
rank++;
}
// 승자 비교 - 작은수가 승리
int winner = -1;
int winner_score = 2147483647;
for (const auto& team_pair : each_team_rank)
{
int cur_score = team_pair.second[0] + team_pair.second[1] + team_pair.second[2] + team_pair.second[3];
if (cur_score < winner_score) {
winner = team_pair.first;
winner_score = cur_score;
}
else if (cur_score == winner_score) {
if (team_pair.second[4] < each_team_rank[winner][4]) {
winner = team_pair.first;
winner_score = cur_score;
}
}
}
// 승자 출력
cout << winner << "\n";
}
}
문제됐던 부분
int winner_score = 2147483647;
승자 비교 부분에서 현재 점수가 winner_score보다 작으면 승자로 체크하는데
MAX를 100,000정도면 여유있다고 생각하여 초기값을 잡았는데 4%에서 틀림처리됨
int의 맥스로 점수 산정하니 맞았다.
이부분을 개선해서 점수비교가 아니라 sort로 풀어봐야될것같다.
반응형