반응형
출처: https://www.acmicpc.net/problem/2456
Input
6
3 1 2
2 3 1
3 1 2
1 2 3
3 1 2
1 2 3
Output
1 13
point[1~4] = {1점, 2점, 3점, 합산} 저장
합산 → 3점 → 2점 → 1점 순으로 비교하여 한명이 선정되는지 확인합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Student {
// 1~3점 받은 횟수, [4]: 점수 합산
int point[5];
}students[4];
int player[4] = { 0, 1, 1, 1 };
int checkPlayer(int pivot) {
int i, value = 0;
// 살아남은 학생들 중에서 점수의 최대값 구하기
for (i = 1; i <= 3; ++i) {
if (player[i]) {
value = value < students[i].point[pivot] ? students[i].point[pivot] : value;
}
}
// 살아남은 학생들 중에서 기준미달 제외
for (i = 1; i <= 3; ++i) {
if (player[i] && value > students[i].point[pivot]) {
player[i] = 0;
}
}
int cnt = 0;
// 살아남은 사람 확인
for (i = 1; i <= 3; ++i) {
if (player[i]) cnt++;
}
// 살아남은 사람이 1명인 경우
if (cnt == 1) {
for (i = 1; i <= 3; ++i) {
if (player[i]) {
printf("%d %d", i, students[i].point[4]);
return 1;
}
}
}
return 0;
}
int main(void) {
// freopen("input.txt", "r", stdin);
int N, vote[4];
scanf("%d", &N);
while(N--){
for (int i = 1; i <= 3; ++i) {
scanf("%d", &vote[i]);
students[i].point[4] += vote[i];
students[i].point[vote[i]]++;
}
}
// 합산점수 > 3점 점수 > 2점 점수 비교
for (int i = 4; i >= 2; --i) {
if (checkPlayer(i))
return 0;
}
// 1명으로 결정되지 않는 경우
int value = 0;
for (int i = 1; i <= 3; ++i) {
value = value < students[i].point[4] ? students[i].point[4] : value;
}
printf("0 %d", value);
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 4153 직각삼각형 (0) | 2021.02.20 |
---|---|
[BOJ] 백준 6443 애너그램 (0) | 2021.02.20 |
[BOJ] 백준 1395 스위치 (0) | 2021.02.19 |
[BOJ] 백준 2573 빙산 (0) | 2021.02.18 |
[BOJ] 백준 6593 상범 빌딩 (0) | 2021.02.18 |
댓글