본문 바로가기

백준

백준 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등인 선수들은 전부 출력한다.

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

백준 17128 소가 정보섬에 올라온 이유(JAVA)  (0) 2022.08.19
백준 10703 유성(JAVA)  (0) 2022.08.19
백준 2729 이진수 덧셈(JAVA)  (0) 2022.08.17
백준 18311 왕복 (JAVA)  (0) 2022.08.15
백준 1316 그룹 단어 체커 (JAVA)  (0) 2022.08.15