본문 바로가기

백준

백준 5766 할아버지는 유명해!(JAVA)

문제

https://www.acmicpc.net/problem/5766

 

5766번: 할아버지는 유명해!

각 테스트 케이스마다,  당신의 프로그램은 한 행에 2등인 선수(들)의 번호를 출력해야 합니다. 2등인 선수가 두 명 이상인 경우(동점자 발생), 각 선수 번호를 공백으로 구분하여 오름차순으로

www.acmicpc.net

코드

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int[] score = new int[10001];

        while(true) {
            st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
            int first = Integer.MIN_VALUE;
            int second = Integer.MIN_VALUE;

            score = new int[10001];

            if(N == 0 && M == 0)
                break;

            //점수 계산
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < M; j++) {
                    int idx = Integer.parseInt(st.nextToken());
                    score[idx]++;
                }
            }

            //1등의 점수 확인
            for (int i = 1; i < 10001; i++) {
                first = Math.max(first, score[i]);
            }

            //2등의 점수 확인
            for (int i = 1; i < 10001; i++) {
                if(score[i] != first){
                    second = Math.max(second, score[i]);
                }
            }

            //2등인 선수 확인
            for (int i = 1; i < 10001; i++) {
                if(score[i] == second)
                    sb.append(i+" ");
            }

            //
            sb.append("\\n");
        }
        System.out.println(sb.toString());
    }

}

풀이

먼저 0 0이 입력되기 전까지 무한반복으로 진행하고 입력값으로 들어오는 선수들의 번호를 인덱스로 하는 배열의 수를 +1증가시킨다. 그리고 입력이 끝났다면 가장 점수가 높은 선수의 점수를 확인하고 그다음 두번째로 높은 선수의 점수를 확인해 저장 해놓는다. 그리고 2등인 선수들은 전부 출력한다.

'백준' 카테고리의 다른 글