본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2456 나는 학급회장이다.

by 까망 하르방 2021. 2. 20.
반응형

출처: 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

댓글