[JS][백준]16943_숫자 재배치
Algorithm/BaeKJoon

[JS][백준]16943_숫자 재배치

문제 번호

 

16943번: 숫자 재배치

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

www.acmicpc.net

 

 

 

알고리즘 분류

 

문제 풀이

 주어진 숫자 A로 만들수 있는 모든 숫자들을 만들어보고 조건에 맞는지 확인하면된다.

조건은 A를 이루는 숫자들을 모두 사용해야하고, 그 결과물이 B보다 작아야한다. 

브루트포스 알고리즘을 사용해서 문제를 해결하였으나 DFS를 통하여 풀이를 진행해도 가능하다.

 

전체코드

let s = [];
let answer = -1;

function check(s, b, n){  
  s = Number(s.join(''));  
  if(s.toString().length !== n)
    return -1;
  if(s < b && s > answer)
    answer = s;  
}

function sol(A, b, visited) {
  if (s.length === A.length)
    return check(s, b, A.length);

  for (let i = 0; i < A.length; i++) {
    if (!visited[i]) {
      s.push(A[i]);
      visited[i] = true;
      sol(A, b, visited);
      s.pop();
      visited[i] = false;
    }
  }

}

function insert() {
  const input = require('fs').readFileSync('숫자 재배치/input.txt').toString().trim().split(' ').map(Number);
  let [a, b] = input.slice(0, 2);
  let A = a.toString().split('').map(Number);  
  //console.log(A)
  let visited = new Array(A.length).fill(false)
  sol(A, b, visited);
  console.log(answer);
}
insert();

 

특이사항

 

 

'Algorithm > BaeKJoon' 카테고리의 다른 글

[JS][백준]2636_치즈  (0) 2021.11.11
[JS][백준]17216_가장 큰 감소 부분 수열  (0) 2021.11.09
[JS][백준]16928_뱀과 사다리 게임  (0) 2021.10.27
[JS][백준]1719_택배  (0) 2021.10.27
[JS][백준]1939_중량제한  (0) 2021.10.25