당신은 세계 최고의 기업인 사성(Sassung)의 입사 시험을 담당하고 있다. 입사 시험은 단 한번의 프로그래밍 대회로 이루어 진다.
시험에 참가하는 N 명의 참가자에게 1부터 N까지의 번호가 붙어 있고,
그들은 T개의 문제를 통해서 경쟁한다.
문제에 부분 점수는 없어서, 참가자는 항상 어떤 문제를 풀거나, 풀지 못한다.
각 문제는 해당 문제를 풀지 못한 참가자의 수를 점수로 가지며, 때문에 대회가 끝나고 나서야 점수가 결정된다.
참가자는 자신이 푼 문제들에 배정된 점수들의 합을 자신의 점수로 가진다.
참가자의 등수는 (자신보다 많은 점수를 획득한 참가자의 수) + (자신과 같은 점수를 획득하였지만 더 많은 문제를 푼 참가자의 수) + (자신과 같은 점수를 획득하고 같은 수의 문제를 풀었지만 번호가 더 작은 참가자의 수) + 1 로 결정된다.
당신의 친구 지학이는 번호 P번으로 입사 시험에 참가했다.
지학이는 대회의 복잡한 배점 방식에 혼란이 와서, 본인의 점수를 계산하지 못하고 있다.
대회의 채점 결과가 주어졌을 때, 지학이의 점수와 등수를 계산해라.
첫 번째 줄에 테스트 케이스의 수 Tc가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 N, T, P가 공백으로 구분되어 주어진다.
(1 ≤ P ≤ N ≤ 2000, 1 ≤ T ≤ 2000)
다음 N 줄에는 각 대회 참가자들이 문제를 풀었는지, 못 풀었는지의 여부가 주어진다.
K번째 줄은 번호가 K인 참가자의 정보를 나타낸다. 각 줄에 있는 T개의 공백으로 구분된 정수들은 모두 0이나 1의 값을 가지며, 이 중 i번째 정수의 값이 0일 경우에는 참가자가 i번 문제를 풀지 못한 것이고, 1일 경우에는 참가자가 i번 문제를 푼 것이다.
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
각 테스트 케이스마다 지학이의 최종 점수와 등수를 공백으로 구분해서 출력하라.
2 // 테스트 케이스 개수
5 3 2 // 첫 번째 테스트 케이스 N = 5, T = 3, P = 2
0 0 1 // 첫 번째 참가자에 대한 정보
1 1 0 // 두 번째 참가자에 대한 정보
1 0 0
1 1 0
1 1 0
5 4 4
1 0 1 1
0 0 1 1
0 1 1 0
0 1 1 0
1 1 1 1
#1 3 2 // 첫 번째 테스트 케이스 결과
#2 2 5
import java.util.Scanner;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T, N, TC, P;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++) {
N=sc.nextInt();
TC=sc.nextInt();
P=sc.nextInt();
sc.nextLine();
int[][] participant = new int[N][TC+1];
int[] score = new int[TC];
int[] result = new int[N];
for(int i = 0; i < N; i++) {
String str = sc.nextLine();
String[] arr = str.split(" ");
for(int j = 0; j < TC; j++) {
participant[i][j] = Integer.parseInt(arr[j]);
//participant[i][j] = sc.nextInt();
if(participant[i][j]==0)
score[j]+=1;
if(participant[i][j]==1){
participant[i][TC]++;
}
}
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < TC; j++) {
if(participant[i][j]==1)
result[i]+=score[j];
}
}
int k = result[P-1];
int problem = participant[P-1][TC];
int rank = 1;
for(int i = 0; i < N; i++) {
if(result[i]>k)
rank++;
else if(result[i]==k && participant[i][TC]>problem)
rank++;
else if(result[i]==k && participant[i][TC]==problem && (i+1)<P)
rank++;
}
System.out.println("#"+test_case+" "+k+" "+rank);
}
}
}