Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 16943번 숫자 재배치

    2021. 10. 28.

    by. Hyeon-Uk

    반응형

    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

    댓글

    관련글

    • [백준OJ] 1120번 문자열 2021.11.02
    • [백준OJ] 2920번 음계 2021.11.01
    • [백준OJ] 2670번 연속부분최대곱 2021.10.28
    • [백준OJ] 11060번 점프 점프 2021.10.27
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바