오늘은 백준 2798 문제풀이를 해보았다.
카드의 갯수와 가장 근접해야하는 숫자를 입력받을 N과 M을 선언해주고,
반복문을 무진장 돌려서 값을 찾을 거기 때문에 3개의 카드를 더한 값 sum과, 임시저장 변수
tmp를 선언해주었다.
값을 입력해주어야하기 때문에 입력 변수 sc와 값을 받아와 저장할 배열 apply를 선언해주었다.
Scanner sc = new Scanner(System.in); //입력 변수
int N = sc.nextInt(); // 입력된 숫자를 받아옴
int M = sc.nextInt(); // 입력된 숫자를 받아옴
int sum = 0;
int tmp = 0;
int [] apply = new int[N]; //입력할 카드의 갯수로 배열의 크기를 정함
다음은 선언한 배열에 값을 할당해주었다.
for(int i = 0 ; i < apply.length ; i++) //apply 배열의 크기만큼 반복문을 돔
{
apply[i] = sc.nextInt(); //배열에 값을 할당
}
이제 배열의 있는 숫자에 모든 경우의 수를 더하여 M에 가장 근접한 숫자를 찾는다.
for(int i = 0 ; i < N - 2 ; i++) // i값은 배열의 최종크기 2전까지만 돌면된다.
{
for(int j = i+1 ; j < N - 1 ; j++) // 위에 내용과 동일
{
for(int k = j+1 ; k < N ; k++)
{
sum = apply[i] + apply[j] + apply[k];
if(sum > tmp && sum <= M) // 근사값인지 확인
{
tmp = sum;
}
}
}
}
System.out.println(tmp);
i 와 j 같은 경우 N 전까지 돌아도 똑같지만 같은 연산을 반복하는 것이기 때문에
i는 배열의 크기보다 2작고 j는 1작을 때 까지 반복하도록 했다.
조건문을 통해 임시저장 변수보다 큰지, M의 값보다 작거나 같은지 확인 후 임시저장 변수에
더한 값을 저장 후 출력하였다.
package multiex;
import java.util.Scanner;
public class exam01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int tmp = 0;
int N = sc.nextInt();
int M = sc.nextInt();
int [] apply = new int[N];
for(int i = 0 ; i < apply.length ; i++)
{
apply[i] = sc.nextInt();
}
for(int i = 0 ; i < N - 2 ; i++)
{
for(int j = i+1 ; j < N - 1 ; j++)
{
for(int k = j+1 ; k < N ; k++)
{
sum = apply[i] + apply[j] + apply[k];
if(sum > tmp && sum <= M)
{
tmp = sum;
}
}
}
}
System.out.println(tmp);
}
}
최종 코드본입니다.