1. 문제
https://www.acmicpc.net/problem/2303
2303번: 숫자 게임
N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이
www.acmicpc.net
2. 풀이
구현과 브루트포스 알고리즘으로 분류된 문제이다.
첫 줄의 입력으로 주어지는 테스트 케이스 횟수에 맞춰서 n번째 사람의 카드를 입력받은 후, 각각의 사람 별로 받은 카드 중에서 일의 자리 숫자의 합이 가장 큰 경우를 구한다.
그 후 main으로 돌아와서 현재까지의 가장 큰 경우와 비교하면서 가장 큰 일의 자리 수를 만들 수 있는 사람을 구하면 된다.
3. 소스 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int result = Integer.MIN_VALUE;
int num = 0;
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int[] cardList = new int[5];
for (int j = 0; j < 5; j++) {
cardList[j] = Integer.parseInt(st.nextToken());
}
int returnValue = firstMax(cardList);
if (result <= returnValue) {
result = returnValue;
num = i + 1;
}
}
bw.write(Integer.toString(num));
bw.flush();
bw.close();
br.close();
}
private static int firstMax(int[] cardList) {
int max = Integer.MIN_VALUE;
int length = cardList.length;
for (int i = 0; i < length - 2; i++) {
for (int j = i + 1; j < length - 1; j++) {
for (int k = j + 1; k < length; k++) {
String s = Integer.toString(cardList[i] + cardList[j] + cardList[k]);
max = Math.max(max, s.charAt(s.length() - 1) - '0');
}
}
}
return max;
}
}