let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim();
function solution(input) {
input = input.split("");
const answer = [];
let visited = Array(input.length).fill(false);
function DFS(left, right) {
if (left === right) return;
let result = "";
const minStr = input.slice(left, right).sort()[0];
const minIdx = input.slice(left, right).indexOf(minStr) + left;
visited[minIdx] = true;
for (let i = 0; i < input.length; i++) {
if (visited[i]) result += input[i];
}
answer.push(result);
DFS(minIdx + 1, right);
DFS(left, minIdx);
}
DFS(0, input.length);
return answer.join("\n");
}
console.log(solution(input));
https://github.com/highjoon/Algorithm/blob/master/BOJ/16719.js
input 길이 만큼의 1차원 배열 visited를 선언한다. (초기값 : false)
visited에 true로 되어있는 값만 출력해나갈 것이다.
처음 찾은 최솟값을 기준으로 오른쪽까지 쭉 돌고
그 다음 왼쪽을 돌면서 값을 출력해나간다.