티스토리 뷰

https://www.acmicpc.net/problem/16943

 

16943번: 숫자 재배치

두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다.  가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split('\n');
const [N,M] = input[0].split(' ').map(v=>v.split('').map(Number))
const max = +input[0].split(' ')[1]
let answer = -1;

for(let i  = 0; i<N.length; i++){
  if(N[i]!=0){
    solve(N[i],1,(1<<i))
  }
}

function solve(num,len,visited){
  if(len==N.length){
    if(num>answer && num<max) answer = num;
  }else{
    for(let i = 0; i<N.length; i++){
      if(!(visited&(1<<i))){
        solve(num*10 + N[i], len+1,visited|(1<<i));
      }
    }
  }
}

console.log(answer)
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함