SWEA(SWExpertacAdemy)

[SEWA] 6913. 동철이의 프로그래밍 대회 (자바)

심층코드 2025. 5. 13. 19:36

6913. 동철이의 프로그래밍 대회 D3

 


N명의 사람들이 어떤 프로그래밍 대회에 참가했다.

대회에는 M개의 문제가 나왔다.

동철이는 이 프로그래밍 대회가 열렸다는 소식을 접했고,

간단한 웹 서핑으로 각 사람들이 문제를 풀었는지 아닌지를 나타내는 NⅹM 개의 값 ai,j를 구할 수 있었다.

사람에 1에서 N까지의 번호를 붙이고, 문제에도 1에서 M까지의 번호를 붙일 때,

ai,j 는 대회가 끝나고 i번 사람이 j번 문제를 풀었다면 1, 풀지 못했다면 0을 가지는 값이다.

동철이는 이 대회에는 나가지 못했지만, 다른 프로그래밍 대회에 나갈 계획이고 목표는 우승이다.

그러므로 지금 열린 이 대회에서 1등을 한 사람들을 찾아 라이벌로 삼기로 했다.

이 대회에서 모든 문제의 점수는 같고 프로그램을 제출한 시간은 따지지 않는다.

그러므로, 푼 문제 수가 많은 사람이 더 높은 등수를 가지고, 푼 문제 수가 같은 사람은 같은 등수를 가진다.

이 대회의 결과를 받아 1등을 한 사람이 몇 명이고 몇 문제를 풀었는지 구하는 프로그램을 작성하라.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 두 정수 N, M (1 ≤ N, M ≤ 20) 이 공백 하나로 구분되어 주어진다.

다음 N개의 줄의 i번째 줄에는 M개의 정수 ai,1, ai,2, …, ai,m (0 ≤ ai,j ≤ 1) 이 공백 하나로 구분되어 주어진다.


[출력]

각 테스트 케이스마다 대회에서 1등한 사람의 수와 1등이 푼 문제의 수를 공백 하나로 구분하여 출력한다.

입력
4
3 5
1 0 0 1 0
1 1 1 0 0
0 0 0 1 0
4 4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
4 4
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
1 1
0
//테스트케이스 개수, T=4
//첫 번째 테스트 케이스, N=3, M=5
//사람들의 문제 풀이 여부를 나타내는 NⅹM개의 값                          
 

//두 번째 테스트 케이스, N=4, M=4



 
//세 번째 테스트 케이스, N=4, M=4




//네 번째 테스트 케이스, N=1, M=1
 
출력
#1 1 3
#2 4 4
#3 4 3
#4 1 0
//첫 번째 테스트케이스
//두 번째 테스트케이스
//세 번째 테스트케이스
//네 번째 테스트케이스

[출력]

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int i = 1; i <= T; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
            List<Integer> solvedCounts = new ArrayList<>();

            for (int j = 0; j < N; j++) {
                StringTokenizer st2 = new StringTokenizer(br.readLine());
                int count = 0;
                for (int k = 0; k < M; k++) {
                    int solved = Integer.parseInt(st2.nextToken());
                    if (solved == 1) {
                        count++;
                    }
                }
                solvedCounts.add(count);
            }

            int first = 0;
            for (int count : solvedCounts) {
                if (count > first) {
                    first = count;
                }
            }

            int topRankCount = 0;
            for (int count : solvedCounts) {
                if (count == first) {
                    topRankCount++;
                }
            }

            System.out.println("#" + i + " " + topRankCount + " " + first);
        }

    }

}