문제풀이 [2798]

김영진·2022년 8월 9일
0

링크텍스트

오늘은 백준 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);
	}
}

최종 코드본입니다.

profile
여행과 코딩을 좋아하는 사람입니다

0개의 댓글