반응형
백준 알고리즘 2798번은 모든 경우의 수를 생각하는 브루트 포스 문제다. 자바로 알고리즘을 만들어보자.
입력값은 n과 m이 주어진다.
n은 카드의 갯수이며, m은 카드의 조합으로 가장 가까운 수를 맞춰야 하는 수다.
문제의 핵심은 모든 경우의 수를 생각한다는 것이다.
문제에서는 카드를 3장 뽑을 수 있게 되어 있다.
처음 선택가능한 카드는 n장이다.
두번째 선택 가능한 카드는 n-1장이다.
마지막으로 선택 가능한 카드는 n-2장이다.
먼저 입력값을 받아와서, 3번의 for문을 순회하면서 모든 경우의 수를 조회해보는 것이다.
3장의 카드값을 뽑아서, max값을 구하는 로직을 계속 순회한다.
for문이 종료되면 max값에는 m값과 가장 근사한 값이 할당되어 있다.
출력하면 로직은 끝이난다.
JAVA CODE
import java.util.ArrayList;
import java.util.Scanner;
public class Brute_force{
public static void main(String[] args){
Scanner inputValue = new Scanner(System.in);
String [] NM = inputValue.nextLine().split(" ");
int n = Integer.parseInt(NM[0]);
int m = Integer.parseInt(NM[1]);
int [] cardValueList=new int[n];
for(int i=0; i<cardValueList.length; i++){
cardValueList[i]=inputValue.nextInt();
}
ArrayList<Integer> card = new ArrayList<Integer>();
for(int num:cardValueList){
card.add(num);
}
int max = 0;
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++){
int sum=card.get(i)+card.get(j)+card.get(k);
if(sum <= m){
max=Math.max(sum, max);
}
}
}
}
System.out.println(max);
}
}
반응형
'Programming > Algorithm' 카테고리의 다른 글
백준 1780 종이의 개수 알고리즘 자바 JAVA (0) | 2022.03.02 |
---|---|
백준 1992번 쿼드트리 분할정복 알고리즘 JAVA 자바 (0) | 2022.03.01 |
백준 알고리즘 2630번 분할정복 색종이 만들기 자바 JAVA (0) | 2022.02.28 |
알고리즘 설계기법 (0) | 2022.02.25 |
백준 알고리즘 7615번 해싱 탐색 자바 JAVA 메모리 초과 문제 (0) | 2022.02.24 |
백준 알고리즘 1920번 이분탐색 수 찾기 자바 JAVA (0) | 2022.02.23 |
댓글