점수+집계

=ACM ICPC 2004 인터넷 문제 A - 점수 집계=

한국 체조협회에서는 심판의 오심을 막기 위하여 점수 집계 시스템을 고치기로 하였다. 이전에는 5 명의 심판이 1 점부터 10 점까지 정수의 점수를 주면 최고점과 최저점을 하나씩 제외한 점수의 합을 총점으로 하였다. 이를 보완하기 위해서 최고점과 최저점을 뺀 나머지 3 명 점수의 최고점과 최저점의 차이가 4 점 이상나게 되면 점수 조정을 거쳐서 다시 점수를 매기려고 한다. 점수를 집계하여 총점을 계산하거나, 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 KIN(Keep In Negotiation)을 출력하는 프로그램을 작성하시오.

I. Input
입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T(1 <= T <= 10)가 주어진다. 각 테스트 케이스는 한 줄에 다섯 심판이 준 점수 다섯 개의 정수 Ni(1 <= Ni <= 10, i = 1, 2, ..., 5)가 하나의 공백을 사이에 두고 주어진다.

II. Output
출력은 표준출력(standard output)을 통하여 출력한다. 각 테스트 케이스에 대해서 총점을 한 줄씩 출력한다. 만일 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 KIN을 출력한다.

III. Sample Input
4 10 8 5 7 9 10 9 10 9 5 10 3 5 9 10 1 2 3 6 9

IV. Sample Output
24 28 KIN KIN

Java
code format="java5" import java.util.Arrays; import java.util.Scanner;

public class Score { private static final int NUM_REFEREE = 5;   // 심판의 수 private static final int MAX_GAP = 4;   // 최고점과 최저점의 차이

public static void main(String[] args) { Scanner scan = new Scanner(System.in);

int T = scan.nextInt;   // 테스트 케이스 개수

int[] N = new int[NUM_REFEREE];   // 다섯 심판이 준 점수

for(int i = 0; i < T; i++) { for(int j = 0; j < N.length; j++) { N[j] = scan.nextInt; }

process(N); }   }

public static void process(int[] n) { // 정렬한다. Arrays.sort(n);

// 최고점과 최저점을 제외한다. // 그 중 최고점과 최저점의 차이가 4점 이상 나면 KIN을 출력하고 // 아니면 총점을 출력한다. if(Math.abs(n[1] - n[3]) >= MAX_GAP) { System.out.println("KIN"); }       else { System.out.println(n[1] + n[2] + n[3]); }   } } code

C++
code format="cpp"
 * 1) include
 * 2) include
 * 3) include

using namespace std;

int main { int T;// 테스트 케이스의 개수 cin >> T;

for(int i = 0; i < T; i++) { vector scores(5);

for(int j = 0; j < 5; j++) { cin >> scores[j]; }

// 오름차순으로 정렬을 수행한다. sort(scores.begin, scores.end);

if((scores[3] - scores[1]) >= 4) { cout << "KIN" << endl; } else { cout << (scores[1] + scores[2] + scores[3]) << endl; } }

return 0; } code

VII. Comment
최소값과 최대값은 정렬을 하면 쉽게 구할 수 있다. 다행히 자바에서는 정렬 라이브러리가 있기에 쉽게 풀 수 있었다.