반응형
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 833 | 235 | 173 | 28.690% |
문제
N보다 작거나 같은 자연수 중에서, 집합 K의 원소로만 구성된 가장 큰 수를 출력하는 프로그램을 작성하시오. K의 모든 원소는 1부터 9까지의 자연수로만 구성된다.
예를 들어 N=657이고, K={1, 5, 7}일 때 답은 577이다.
입력
첫째 줄에 N, K의 원소의 개수가 공백을 기준으로 구분되어 자연수로 주어진다. (10 ≤ N ≤ 100,000,000, 1 ≤ K의 원소의 개수 ≤ 3) 둘째 줄에 K의 원소들이 공백을 기준으로 구분되어 주어진다. 각 원소는 1부터 9까지의 자연수다.
단, 항상 K의 원소로만 구성된 N보다 작거나 같은 자연수를 만들 수 있는 경우만 입력으로 주어진다.
출력
첫째 줄에 N보다 작거나 같은 자연수 중에서, K의 원소로만 구성된 가장 큰 수를 출력한다.
예제 입력 1
657 3
1 5 7
예제 출력 1
577
코드
import java.io.*;
import java.util.*;
public class p18511 {
static int n, k;
static int[] arr;
static int answer = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
arr = new int[k];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < k; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
dfs(0);
System.out.println(answer);
}
static void dfs(int now) {
if (now > n) return;
if (answer < now) answer = now;
for (int i = k - 1; i >= 0; i--) {
dfs(now * 10 + arr[i]);
}
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][19236] 청소년 상어 (0) | 2021.05.10 |
---|---|
[ BOJ ][JAVA][18808] 스티커 붙이기 (0) | 2021.05.10 |
[ BOJ ][JAVA][1939] 중량제한 (0) | 2021.05.10 |
[ BOJ ][JAVA][18430] 무기 공학 (0) | 2021.05.10 |
[ BOJ ][JAVA][18312] 시각 (0) | 2021.05.10 |