이번 문제는 별로 어렵지 않았다.
입력은 첫 번째 줄에 카드의 장수 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);
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 1018 : 체스판 다시 칠하기 JAVA 풀이 (0) | 2022.05.24 |
---|---|
[백준] 7568 : 덩치 JAVA 풀이 (0) | 2022.05.23 |
[백준] 11729 : 하노이 탑 이동 순서 JAVA 풀이 (0) | 2022.05.23 |
[백준] 2447 : 별 찍기 - 10 JAVA 풀이 (0) | 2022.05.23 |
[백준] 17478 : 재귀함수가 뭔가요? JAVA 풀이 (0) | 2022.05.22 |