문제 설명이 좀 이상한 문제였는데 입력으로 N을 받고 이후 오른쪽 숫자는 그냥 무시하고, 그 다음 입력받는 값들로 N 이하 최대값을 만들어 출력해주면 되겠다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int[] arr;
static int[] target;
static int max;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
target = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Arrays.sort(target);
getMaxVal(0);
System.out.println(max);
}
public static void getMaxVal(int val) {
if (val > arr[0]) {
return;
}
max = Math.max(max, val);
for (int i = target.length - 1; i > -1; i--) {
getMaxVal(val * 10 + target[i]);
}
}
}
문제 설명에 따르면 K와 하단에 입력받는 원소 갯수가 동일해야 할 것 같지만, 실제 답안을 제출하다 보면 그렇지 않기 때문에 K는 그냥 무시하고, 하단에 입력받는 수 기준으로 처리를 해 줘야하고
문제를 풀어보자면, 두 번째로 입력받은 원소 값들을 정렬한 후, 재귀를 돌려주면서 큰 값 순서대로 동일한 메소드를 계속 호출해주되 값이 N보다 커지면 중단시키고 그렇지 않다면 최대값 계속 확인해 주면서 모든 경우의 수를 넣어준 뒤 최대값만 출력해주면 끝이다.
Leave a Reply