문제 내용은 입력으로 사람 수와, 카드패를 받은 후 세 수를 더했을 때, 1의 자리가 가장 큰 경우의 사람을 출력해야 하는데 최대값이 동일할 경우에는 나중에 입력받은 사람 순으로 출력해주면 되겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
TreeMap<Integer, Integer> map = new TreeMap<>();
for (int i = 0; i < count; i++) {
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int max = 0;
for (int j = 0; j < arr.length - 2; j++) {
for (int k = j + 1; k < arr.length - 1; k++) {
for (int l = k + 1; l < arr.length; l++) {
max = Math.max(max, (arr[j] + arr[k] + arr[l]) % 10);
}
}
}
map.put(i, max);
}
Integer mapMax = Collections.max(map.values());
int ans = 0;
for (Entry<Integer, Integer> entry : map.entrySet()) {
if (Objects.equals(entry.getValue(), mapMax)) {
ans = Math.max(ans, entry.getKey());
}
}
System.out.println(ans + 1);
}
}
문제를 풀어보자면 먼저 반복문을 돌리면서 3개를 뽑는 경우니, 3번 돌려주면서 만들 수 있는 모든 경우의 수를 max에 넣어 최대값을 구해주되, 세 수를 더하고 %10을 하는 식으로 마지막 자리의 값을 구해줄 수 있다.
이후 TreeMap<Integer, Integer>에 사람 번호별 최대값을 모두 넣어주면 크기 순으로 쉽게 정렬시킬 수 있고, map에서 최대값을 구한 뒤 map에서 값을 하나씩 꺼내보면서, 최대값과 Value가 같다면 Key를 변수에 할당해주되, 최대값이 동일한 경우에는 더 큰 Key를 대신 넣도록 해서 Map을 모두 확인한 뒤 최대 Key를 출력해주면 끝이다.
Leave a Reply