문제
https://www.acmicpc.net/problem/9017
문제 접근
- 점수를 구할 때 6인보다 적은 팀은 점수 계산에 상정되지 않는다는 것을 유의해야 한다. 이는 즉 입력에서부터 각 팀원당 몇 명이 소속 되어 있는지를 확인해야 한다.
- 또한 상위 4인 까지의 점수의 합으로 먼저 판단한 뒤 동점이 나올 시 5번째로 들어온 사람의 점수를 사용하여 최종적으로 판별하는 것을 유의해야 한다.
- Map을 사용하면 매우 쉽게 구현이 가능한 문제였다. 정렬을 통해 최종 우승을 가려야 하는데 정렬 시 2개의 조건을 사용해야 하므로 람다를 통해 구현하였다.
해결 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int testCase = 0; testCase < T; testCase++){
int N = Integer.parseInt(br.readLine());
int[] rank = new int[N];
Map<Integer, Integer> result = new HashMap<>();
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++){
int data = Integer.parseInt(st.nextToken());
result.put(data, result.getOrDefault(data, 0) + 1);
rank[i] = data;
}
int[] fifthGoalIdx = new int[result.size() + 1];
Map<Integer, Integer> scoreMap = new HashMap<>();
Map<Integer, Integer> tempMap = new HashMap<>();
int score = 1;
for (int element: rank){
if (result.get(element) >= 6){
tempMap.put(element, tempMap.getOrDefault(element, 0) + 1);
if (tempMap.get(element) <= 4){
scoreMap.put(element, scoreMap.getOrDefault(element, 0) + score);
}
if (tempMap.get(element) == 5){
fifthGoalIdx[element] = score;
}
score++;
}
}
List<Integer> keyData = new ArrayList<>(scoreMap.keySet());
keyData.sort((x, y) -> {
if (Objects.equals(scoreMap.get(x), scoreMap.get(y))){
return fifthGoalIdx[x] - fifthGoalIdx[y];
} else{
return scoreMap.get(x) - scoreMap.get(y);
}
});
System.out.println(keyData.get(0));
}
}
}
- 람다를 구현할 때 scoreMap.get(x) == scoreMap.get(y)로 비교를 수행했었는데 알고 보니 해당 방식은 객체 참조 주소를 사용하여 비교하는 것이였다. 이것 때문에 꽤 해매었던 것 같다.
'Algorithm > DataStructure' 카테고리의 다른 글
[백준][BOJ 2257] - 화학식량 (1) | 2023.10.09 |
---|---|
[백준][BOJ 12789] - 도키도키 간식드리미 (1) | 2023.10.07 |
[백준][BOJ 20920] - 영단어 암기는 괴로워 (1) | 2023.10.03 |
힙(우선순위 큐)의 활용 - 프로그래머스 디스크 컨트롤러 (0) | 2023.03.19 |
힙(우선순위 큐)의 활용 - BOJ 24174 알고리즘 수업 - 힙 정렬 2 (0) | 2023.03.19 |