728x90
반응형
2024.07.16기준 - 실버5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 카드 게임을 m번을 진행 했을 때, 가장 높은 점수를 받은 플레이어들의 번호를 출력하는 문제입니다.
1. 먼저 플에이어의 번호와 카드들을 저장하는 클래스를 생성했습니다.
// 각 플레이어의 번호와 카드를 저장하는 클래스
public static class Player {
int number;
Integer[] card;
public Player(int n, Integer[] c) {
card = new Integer[c.length];
number = n;
for (int i = 0; i < c.length; i++) {
card[i] = c[i];
}
}
}
2. 그 후 입력 받은 카드들을 저장을 해주었습니다.
// 플레이어들의 점수를 저장하는 배열
int[] score = new int[n + 1];
// 모든 플레이어의 번호와 카드를 저장하는 리스트
List<Player> list = new LinkedList<>();
// 각 플레이어의 카드를 저장하기 위한 임시 배열
Integer[] subcard = new Integer[m];
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
subcard[j] = Integer.parseInt(st.nextToken());
}
Arrays.sort(subcard, (o1, o2) -> o2 - o1);
list.add(new Player(i, subcard));
}
3. 저장된 카드로 각 게임의 최고 수와 전체 게임의 최고 점수를 저장해 일치하는 플레이어의 번호를 출력해 주었습니다.
// max: 각 턴마다 가장 높은 카드의
// scoreMax : 총 게임 중 가장 높은 점수
int max, scoreMax = 0;
for (int i = 0; i < m; i++) {
max = 0;
// i번째 게임에서 가장 큰 카드의 숫자
for (int j = 0; j < n; j++) {
max = Math.max(list.get(j).card[i], max);
}
for (int j = 0; j < n; j++) {
// 가장 큰 카드와 같으면 점수를 +1
if (list.get(j).card[i] == max) {
score[list.get(j).number]++;
// 점수를 얻을 때 가장 큰 점수를 저장
scoreMax = Math.max(score[list.get(j).number], scoreMax);
}
}
}
// 가장 큰 점수를 저장했을 때 그 점수를 얻은 플레이어 번호를 출력
for (int i = 1; i <= n; i++) {
if (score[i] == scoreMax) {
sb.append(i).append(" ");
}
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
// 각 플레이어의 번호와 카드를 저장하는 클래스
public static class Player {
int number;
Integer[] card;
public Player(int n, Integer[] c) {
card = new Integer[c.length];
number = n;
for (int i = 0; i < c.length; i++) {
card[i] = c[i];
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 플레이어의 수
int m = Integer.parseInt(st.nextToken()); // 가진 카드의 수
// 플레이어들의 점수를 저장하는 배열
int[] score = new int[n + 1];
// 모든 플레이어의 번호와 카드를 저장하는 리스트
List<Player> list = new LinkedList<>();
// 각 플레이어의 카드를 저장하기 위한 임시 배열
Integer[] subcard = new Integer[m];
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
subcard[j] = Integer.parseInt(st.nextToken());
}
Arrays.sort(subcard, (o1, o2) -> o2 - o1);
list.add(new Player(i, subcard));
}
// max: 각 턴마다 가장 높은 카드의
// scoreMax : 총 게임 중 가장 높은 점수
int max, scoreMax = 0;
for (int i = 0; i < m; i++) {
max = 0;
// i번째 게임에서 가장 큰 카드의 숫자
for (int j = 0; j < n; j++) {
max = Math.max(list.get(j).card[i], max);
}
for (int j = 0; j < n; j++) {
// 가장 큰 카드와 같으면 점수를 +1
if (list.get(j).card[i] == max) {
score[list.get(j).number]++;
// 점수를 얻을 때 가장 큰 점수를 저장
scoreMax = Math.max(score[list.get(j).number], scoreMax);
}
}
}
// 가장 큰 점수를 저장했을 때 그 점수를 얻은 플레이어 번호를 출력
for (int i = 1; i <= n; i++) {
if (score[i] == scoreMax) {
sb.append(i).append(" ");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 30502번 미역은 식물 아닌데요 (0) | 2024.07.17 |
---|---|
BEAKJOON / 백준 - JAVA 1991번 트리 순회 (2) | 2024.07.16 |
BAEKJOON / 백준 - JAVA 31776번 예비 소집 결과 보고서 (2) | 2024.07.15 |
BAEKJOON / 백준 - JAVA 28702번 FizzBuzz (0) | 2024.07.14 |
BAEKJOON / 백준 - JAVA 30802번 웰컴 키트 (2) | 2024.07.13 |