https://www.acmicpc.net/problem/2798
접근 :
- 입력 받은 N 개의 수 중 3개를 골라 합하여 target number(M)를 넘지 않는 가장 근접한 수를 출력
- N이 3으로 고정되어 있으므로 재귀 함수 대신 반복문으로 구현
- N개중 1개를 뽑았을 때, M과 같거나 큰 경우 제외(다음 수 로 넘어감)
- N개중 2개를 뽑았을 때, M과 같거나 큰 경우 제외(다음 수 로 넘어감)
- N개중 3개를 다 뽑은 경우, M보다 작은 경우 가장 M과 근접한 수를 찾아서 결과로 출력
- N개중 3개를 다 뽑은 경우, M과 같은 경우 더이상 진행하지 않고 M을 결과로 출력
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1 번째 줄
String[] inputs = br.readLine().split(" ");
int n = Integer.parseInt(inputs[0]);
int target_num = Integer.parseInt(inputs[1]);
// 2 번째 줄
inputs = br.readLine().split(" ");
int[] numbers = new int[n];
for (int i = 0; i < n; i++) numbers[i] = Integer.parseInt(inputs[i]);
int result = 0;
int temp_sum = 0;
int temp_result = 0;
main_Loop :for (int j = 0; j < n - 2; j++) {
// 뽑은 수가 목표치 보다 크거나 같으면 다음 수로 넘어감
if (numbers[j] >= target_num) continue;
for (int k = j + 1; k < n - 1; k++) {
temp_sum = numbers[j] + numbers[k];
if (temp_sum >= target_num) continue;
for (int p = k + 1; p < n; p++) {
temp_result = temp_sum + numbers[p];
// 목표치 보다 작은 값 중 가장 target에 근접한 수를 결과값으로 선정
if (temp_result < target_num) {
result = (temp_result > result) ? temp_result : result;
// 목표치와 동일한 값을 발견하면 더 이상 진행하지 않고 결과 출력
}else if(temp_result == target_num) {
result = target_num;
break main_Loop;
}
}
}
}
// 결과 화면출력
System.out.println(result);
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 10870 피보나치 수 5_ 재귀함수 (0) | 2023.03.01 |
---|---|
[JAVA] 백준 10872 팩토리얼_재귀함수 (0) | 2023.02.28 |
[JAVA] 백준 2231 분해합_브루트포스 (0) | 2023.02.28 |
[JAVA] 백준 7568 덩치_브루트포스 (1) | 2023.02.28 |
[JAVA] 백준 1436 영화감독 숌_브루트포스 (0) | 2023.02.28 |