[JS/백준]{구현/재귀함수}(16719) ZOAC

202209월 26

백준 문제 링크

문제 설명

재귀함수로 풀수가 있는 문제이다. 가장 먼저 사전순으로 제일 작은 문자를 찾고

그 문자의 오른쪽부터 훑어보면서 가장 사전순으로 작은 문자를 찾아서 합쳐주고 오른쪽이 다 끝났다면

왼쪽으로 훑어보면서 똑같이 반복을해주면 된다. 이 문제는 함정이 있는데 4번째줄에 trim을 해주지

않아서 출력 형식에 맞지 않습니다. 가 엄청 멘붕이었다.


풀이 코드

const line = require("fs").readFileSync("./input.txt", "utf8");
const inputData = line;

const str = inputData.trim().split("");
const tmp = Array(str.length).fill("");

function abc(arr, start) {
  if (!arr.length) {
    return;
  }
  const copy = arr.slice(); // 배열 복사
  const minAlpha = copy.sort()[0]; // 사전순 가장 작은 문자
  const minIdx = arr.indexOf(minAlpha);
  tmp[start + minIdx] = minAlpha;
  console.log(tmp.join(""));
  abc(arr.slice(minIdx + 1), start + minIdx + 1); // 오른쪽 훑기
  abc(arr.slice(0, minIdx), start); // 왼쪽 훑기
}

abc(str, 0);