-
반응형
https://www.acmicpc.net/problem/16943
16943번: 숫자 재배치
두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다. 가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0
www.acmicpc.net
풀이
숫자를 입력받은 뒤, Character형으로 모두 쪼개어 저장을 하고 DFS를 이용해서 나올 수 있는 모든 수를 구해준 뒤, B보다 작으면서 가장 큰 숫자를 구해주면 된다.
Character형으로 쪼개준 이유는, 맨 앞에 0이 올 수 없기때문에, 이를 체크해주기 위해서이다.
코드
import java.util.Scanner; import java.util.Vector; public class Main { static int A,B,ret=-1; static Vector<Character> v=new Vector<>(); static boolean[] visited; public static void dfs(int cnt,String c){ if(cnt!=0&&c.charAt(0)=='0') return; if(v.size()==cnt){ int num=Integer.parseInt(c); if(num<B) { ret=Math.max(ret,num); } return; } for(int i=0;i<v.size();i++){ if(!visited[i]){ visited[i]=true; dfs(cnt+1,c+v.elementAt(i)); visited[i]=false; } } } public static void main(String[] args){ Scanner scanner=new Scanner(System.in); A=scanner.nextInt(); B=scanner.nextInt(); while(A>0){ char c=(char)((A%10)+'0'); v.add(c); A/=10; } visited=new boolean[v.size()]; dfs(0,""); System.out.println(ret); } }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 1120번 문자열 (0) 2021.11.02 [백준OJ] 2920번 음계 (0) 2021.11.01 [백준OJ] 2670번 연속부분최대곱 (0) 2021.10.28 [백준OJ] 11060번 점프 점프 (0) 2021.10.27 [백준OJ] 4256번 트리 (0) 2021.09.28 댓글