반응형
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로 풀어봐야될것같다.
반응형
'공부' 카테고리의 다른 글
[TIL][C++, 게임 프로그래밍] 241203 2. 스택 메모리와 스택 프레임 with 계엄령 (1) | 2024.12.04 |
---|---|
[TIL][C++, 게임 프로그래밍] 241202 1. 프로그래밍 개론 (0) | 2024.12.03 |
[Play Console] 앱이 Android 14(API 수준 34) 이상을 타겟팅 해결하기 (0) | 2024.10.26 |
[알고리즘] 1. 조합과 순열 (0) | 2024.07.13 |
[Play Console] 2. 플레이 스토어 비공개 테스트 진행과정 (5) | 2024.07.10 |
댓글