
🧫 문제 분석
✔️ 출처
📖 문제

등수 관련 문제
한 팀에 6명이 출전 , 6명이 안되면 점수 제외
결승전 통과한 순서대로 점수를 받는다.
각 팀의 4번째 선수까지 팀점수로 계산된다.
가장 낮은 점수 팀이 우승이며 , 동점일경우 팀의 5번째 선수의 점수가 더 낮은 팀이 우승하게 된다.
로직은 쉽게 짰는데 map을 초기화해주는걸 까먹어서 이상한데서 자꾸 틀리다가 출력 찍어보니까 알았다...ㅋㅋ
여러개의 테스트 케이스가 들어올때는 항상 조심하자..
🔅 문제 풀이
import java.io.*;
import java.util.*;
public class Main {
// 1팀 = 6명 (상위 4명 점수 합)
// 결승점을 통과한 순서대로 점수 받음
// 가장 낮은 점수 팀이 우승
// 6명 주자 참가못한 팀은 제외
// 동점일 경우 5번째 사람 가장빨리 들어온 팀이 우승
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Map<Integer, Integer> teamCheck = new HashMap<>();
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[][] scores = new int[201][3]; // 팀번호, [점수, 명수, 5번째 사람]
int[] rank = new int[n];
// 점수 및 6명 미만 팀 체크
for (int j = 0; j < n; j++) {
rank[j] = Integer.parseInt(st.nextToken());
int value = teamCheck.getOrDefault(rank[j], 0) + 1;
teamCheck.put(rank[j], value);
}
int score = 1;
// 점수 계산
for (int j = 0; j < n; j++) {
if (teamCheck.get(rank[j]) < 6) continue;
// 상위 4명까지 팀 점수에 합
if (scores[rank[j]][1] < 4) {
scores[rank[j]][0] += score;
scores[rank[j]][1]++;
// 5번째 선수 점수 기록
} else if (scores[rank[j]][1] == 4) {
scores[rank[j]][2] = score;
scores[rank[j]][1]++; // 중복 저장 피하기용
}
score++; // 5번째 까지 기록한 팀은 더이상 기록하지 않고 현재 점수만 증가
}
// 점수로 팀 등수 계산
int min = Integer.MAX_VALUE;
int runner5 = Integer.MAX_VALUE; // 5번째 선수의 점수
int winnerTeam = 0;
for (int team : teamCheck.keySet()) {
if (teamCheck.get(team) < 6) continue;
// 같은 스코어면 5번째 선수 점수 비교
if (scores[team][0] == min && scores[team][2] < runner5) {
winnerTeam = team;
runner5 = scores[team][2];
} else if (scores[team][0] < min) {
min = scores[team][0]; // 현재까지 우승 팀 스코어
winnerTeam = team; // 현재까지 우승 팀
runner5 = scores[team][2]; // 5번째 선수 점수 등록
}
}
sb.append(winnerTeam).append("\n");
teamCheck.clear();
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
❗ 오답노트 / 필요한 지식
'baekjoon' 카테고리의 다른 글
백준 10830번 : 행렬 제곱 [자바] (0) | 2025.04.04 |
---|---|
백준 14719번 : 빗물 [자바] (0) | 2025.03.13 |
백준 18870번 : 좌표 압축 [자바] (1) | 2025.03.02 |
백준 1022번 : 소용돌이 예쁘게 출력하기 [자바] (1) | 2025.02.04 |
백준 2448번 : 별 찍기 - 11 자바 (1) | 2024.09.13 |