반복문을 돌 때 3장의 카드를 골라야하기 때문에 처음 반복문에서는 배열 길이에서 -2까지, 두 번째 반복문에서는 첫 번째 반복문 다음부터 배열 길이의 -1까지, 마지막 반복문에서는 두 번째 반복문 다음부터 마지막까지 순회
이전에 계산된 값을 저장할 answer와 현재 계산된 값을 저장할 currentSum 변수 생성
만약 3개 카드의 합이 제시된 수와 일치한다면 return시키기
현재 계산된 값이 제시된 수보다 작으면서 이전에 계산된 값보다 클 경우 answer의 값 갱신하기
코드
package org.example;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strArray1 = br.readLine().split(" ");
int sum = Integer.parseInt(strArray1[1]);
String[] strArray = br.readLine().split(" ");
int[] array = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) {
array[i] = Integer.parseInt(strArray[i]);
}
int answer = 0; // 지금까지 찾은 최대 합
System.out.println(search(array, answer, sum));
br.close();
}
static int search(int[] arr, int answer, int sum) {
for (int i = 0; i < arr.length - 2; i++) {
for (int j = i + 1; j < arr.length - 1; j++) {
for (int k = j + 1; k < arr.length; k++) {
// 3개 카드의 합 변수
int currentSum = arr[i] + arr[j] + arr[k];
if (currentSum == sum) {
return currentSum;
}
if (currentSum < sum && currentSum > answer) {
answer = currentSum;
}
}
}
}
return answer;
}
}
댓글