Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

백준 문제풀이/Nodejs

[백준][브루트 포스] 1759 암호 만들기 NodeJs 구현

by 꽁이꽁설꽁돌 2024. 12. 30.
728x90
반응형
     

목차

     

     

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

    문제

     

     

    문제 구현 방향

     

    조합을 구현할 줄 알아야 풀 수 있는 문제이다. 

    아래 글을 참고하자

    https://be-senior-developer.tistory.com/49

     

    [알고리즘] 순열과 조합 c++ 구현

    목차 c++로 순열과 조합을 어떻게 구현하는지에 대해 알아보자 stl로 구현한 순열 #include #include #include using namespace std; int main() { vector v; v.push_back(1); v.push_back(2); v.push_back(3); sort(v.begin(), v.end()); //

    be-senior-developer.tistory.com

     

    문제 풀이

    조합 함수 재귀 종료 조건에서 조합 함수를 한번더 돌려 조건에 만족하면 배열에 넣는 식으로 구현했다.

    최적화를 하지 않아 코드가 난잡하다..

     

     

     

    코드 구현

    const input = require("fs")
      .readFileSync("./dev/stdin", "utf-8")
      .trim()
      .split("\n");
    
    let [L, C] = input[0].trim().split(" ").map(Number);
    
    let dic = input[1].trim().split(" ");
    let mo = [];
    let ja = [];
    dic.forEach((item) => {
      if (
        item === "a" ||
        item === "e" ||
        item === "i" ||
        item === "o" ||
        item === "u"
      ) {
        mo.push(item);
      } else {
        ja.push(item);
      }
    });
    
    let ans = [];
    let ANS = [];
    
    function combi2(arr, cnt, target, tArr) {
      if (arr.length === target) {
        let merge = [...ans];
    
        merge.push(...arr);
        let sorting = merge.sort((a, b) => {
          if (a < b) {
            return -1;
          } else return 1;
        });
        let str = sorting.map((item) => item).join("");
        if (str.length === L) ANS.push(str);
        return;
      }
      for (let i = cnt; i < tArr.length; i++) {
        arr.push(tArr[i]);
        combi2(arr, i + 1, target, tArr);
        arr.pop();
      }
    }
    
    function combi(arr, cnt, target, tArr) {
      if (arr.length === target) {
        ans.push(...arr);
        for (let j = 2; j <= ja.length; j++) {
          let n = [];
          combi2(n, 0, j, ja);
        }
        ans = [];
        return;
      }
      for (let i = cnt; i < tArr.length; i++) {
        arr.push(tArr[i]);
        combi(arr, i + 1, target, tArr);
        arr.pop();
      }
    }
    
    let a = [];
    for (let i = 1; i <= mo.length; i++) {
      combi(a, 0, i, mo);
    }
    
    ANS.sort((a,b)=>{
        if(a<b)return -1;
        else return 1;
    }).forEach((item)=>console.log(item));
    반응형