Algorithm/[BOJ] - JAVA
[백준] 2798 : 블랙잭 JAVA 풀이
Codew
2022. 5. 23. 19:50
이번 문제는 별로 어렵지 않았다.
입력은 첫 번째 줄에 카드의 장수 N, 만들어야 할 수 M
그 다음줄에 N장의 숫자가 주어지는데 이는 StringTokenizer를 이용해서 입력받았다.
매번 세 카드의 합을 저장하는 sum과
그 세 카드의 합 중에서 M과 가장 가까운 값을 저장하는 max라는 변수를 사용했다.
반복문을 다 끝내고나면 max를 출력하는 식으로 코드를 짰다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for(int i=0;i<N;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
int sum = 0;
int max = -1;
loop: // 반복문을 한번에 탈출하기 위해서 이름을 붙임
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 = arr[i]+arr[j]+arr[k];
if(sum==M){
// 세 카드의 합이 M이라면
max = sum; // max값을 업데이트하고
break loop; // 삼중반복문 탈출
}
// 세 카드의 합이 M은 아니지만 지금까지 합들 중 M과 가장 가깝다면
if(max<sum&&sum<M) max = sum; // max값 업데이트
}
}
}
System.out.println(max);
}
}