Algorithm/SW Expert Academy

[SWEA] 3347 올림픽 종목 투표

SSONGMI 2021. 3. 7. 21:48
반응형

문제 출처: SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

: 조직위원회의 정보보다 작은 값을 가지는 종목 중에 가장 앞에 있는 것을 고르면 된다.

: 종목과 조직위원회 정보를 배열에 담고 각 조직위원회를 순회하면서 종목에서 해당 조직위원회의 값 이하인 것들 중에 가장 빠른 인덱스의 종목을 찾으면 되고 그 인덱스에 투표값을 1 증가시켜준다.

: 모든 조직위원회를 순회하고 나서 각 종목의 투표값을 저장한 배열을 돌며 가장 많은 표를 받은 종목을 찾는다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class Solution {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();
    static StringTokenizer st;
 
    public static void main(String[] args) throws NumberFormatException, IOException {
        // 테스트 케이스 수를 입력받고
        int T = Integer.parseInt(br.readLine());
         
        // 테스트 케이스 수만큼 반복하면서 
        for(int tc = 1; tc <= T; tc++) {
            // N과 M을 입력받고
            st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
             
            int[] type = new int[N+1];
            int[] teams = new int[M+1];
             
            // 종목에 대한 배열을 입력받고
            st = new StringTokenizer(br.readLine());
            for(int i = 1, size=N+1; i < size; i++ )
                type[i] = Integer.parseInt(st.nextToken());
             
            // 위원회에 대한 배열을 입력받고
            st = new StringTokenizer(br.readLine());
            for(int i = 1, size = M+1; i < size; i++ )
                teams[i] = Integer.parseInt(st.nextToken());
             
            //투표될 배열을 만들고
            int[] vote = new int[N+1];
             
            // 조직위원회 배열을 순회하며
            for(int i = 1, size=M+1; i < size; i++) {
                // 해당 차례의 M보다 작으면 바로 투표를 +1해줌
                for(int j = 1, sizeN = N+1; j < sizeN; j++) {
                    if(type[j] <= teams[i]) {
                        vote[j]++;
                        break;
                    } 
                }
            }
 
            int max = 0;
            int idx = 0;
            // 투표된 배열을 순회하며 가장 많은 표를 획득한 경기의 번호를 출력
            for(int i = 1, size=N+1; i < size; i++ ) {
                if(vote[i] > max) {
                    max = vote[i];
                    idx = i;
                }
            }
            sb.append(String.format("#%d %d\n", tc, idx));
        }
        System.out.println(sb);
    }
}
반응형