문제 출처:
https://www.acmicpc.net/problem/2456
이러한 문제들은 왠만해서 모든 값들을 다 넣어줘야 한다
그렇기 때문에 조건문들을 사용하여 모든 조건들을 고려해 주어야한다.
3명의 후보들의 각각 점수를 합산하고 그동안 받은 표들을 알고 있어야한다.
따라서 이것을 구현하기에 앞서 struct를 사용하고자 하였다.
#include <iostream>
using namespace std ;
typedef struct score_t
{
int score ;
int p3 ;
int p2 ;
int num ;
}score ;
int main(){
int N ;
cin >> N ;
score s[3] ;
for(int i = 0 ; i < 3; i ++){
s[i].score = 0 ;
s[i].p2 = 0 ;
s[i].p3 = 0 ;
s[i].num = i + 1 ;
}
for(int i = 0 ; i < N; i ++){
int temp[3] ;
cin >> temp[0] >> temp[1] >> temp[2] ;
for(int i = 0 ; i < 3; i++){
s[i].score += temp[i] ;
switch(temp[i]){
case 3: s[i].p3 += 1 ; break ;
case 2: s[i].p2 += 1 ; break ;
default : break ;
}
}
}
/*
for(int i = 0 ; i < 3 ; i ++){
printf("%d\t%d\t%d\t%d\n", s[i].score, s[i].p3, s[i].p2, s[i].num) ;
}
*/
score max ;
unsigned char match = 0 ;
for(int i = 0 ; i < 3 ; i ++){
if(max.score < s[i].score){
max = s[i] ;
if(match != 0)
match = 0 ;
}
else if(max.score == s[i].score){
if(max.p3 < s[i].p3){
max = s[i] ;
if(match != 0)
match = 0 ;
}
else if(max.p3 == s[i].p3){
if(max.p2 < s[i].p2){
max = s[i] ;
if(match != 0)
match = 0 ;
}
else if(max.p2 == s[i].p2)
match = 1 ;
}
}
}
if(match)
printf("0 %d", max.score) ;
else
printf("%d %d", max.num, max.score);
printf("\n") ;
return 0 ;
}
다음과 같은 코드로 구현을 하였으며, 실제로 예제의 결과나 추가적으로 디버깅하기위해서 시도해봤던 것들에 대해서 긍정적인 결과를 볼 수 있었다.
정확하게 어떤 연유인지는 모르지만 아직 나는 부족하구나 싶었다.
아직은 부족하다..
https://github.com/gurcks8989/CodingTest/blob/master/BackJoon/HPS/P2456_I'm_the_class_president.cpp
훈수, 조언 언제나 환영입니다.