문제
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 |