내가 생각했을때 문제에서 원하는부분
첫 줄에는 사람의 수를 나타내는 정수 N이 주어진다.
N은 2이상 1,000이하이다.
그 다음 N 줄에는 1번부터 N번까지 각 사람이 가진 카드가 주어지는 데, 각 줄에는 1부터 10사이의 정수가 다섯 개씩 주어진다.
각 정수 사이에는 한 개의 빈칸이 있다.
게임에서 이긴 사람의 번호를 첫 번째 줄에 출력한다.
이긴 사람이 두 명 이상일 경우에는 번호가 가장 큰 사람의 번호를 출력한다.
내가 이 문제를 보고 생각해본 부분
각 사람마다 5장의 카드에서 3개를 고르는 모든 조합을 확인하며 최대 일의 자리 수를 찾는다.
최대 일의 자리 수가 여러 명일 경우, 번호가 가장 큰 사람을 출력하도록 조건을 설정해준다.
BufferedReader와 StringTokenizer를 사용해 빠른 입출력을 구현한다ㅈ.
코드로 구현
package baekjoon.baekjoon_28;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
// 백준 2303번 문제
public class Main1005 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int winner = 0;
int maxLastDigit = -1;
for(int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int[] cards = new int[5];
for(int j = 0; j < 5; j++) {
cards[j] = Integer.parseInt(st.nextToken());
}
int localMax = -1;
// 5장 중 3장 선택: 3중 for문으로 조합 구현
for(int a = 0; a < 3; a++) {
for(int b = a + 1; b < 4; b++) {
for(int c = b + 1; c < 5; c++) {
int sum = cards[a] + cards[b] + cards[c];
int lastDigit = sum % 10;
if(lastDigit >= localMax) {
localMax = lastDigit;
}
}
}
}
// 최대 일의 자리 수 갱신 및 번호 비교
if(localMax > maxLastDigit) {
maxLastDigit = localMax;
winner = i;
} else if(localMax == maxLastDigit && i > winner) {
// 같은 최대값일 때 번호가 더 큰 사람 선택
winner = i;
}
}
System.out.println(winner);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.