배운점
이 문제 정말 맞왜틀 정말 왜 안돌아가는지..
결국 원인을 찾아냈다. 코드를 보면 let idx 가 dfs 함수안에 선언된 것을 알 수 있다.
이게 밖에 선언이 되어있어서 전역변수 역할을 하게 되면서 slice 되는 인덱스가 계속 바뀌게 되는 치명적인 오류가 발생했다.
아.. 그래도 결국 고쳐서 다행이다.
또한 자바스크립트에서 배열을 복사할때에는 스프레드 연산자를 사용하여 깊은 복사를 해주는 것을 잊지 않아야한다.
const dfs = (arr, start) => {
let idx;
if (arr.length == 0) {
return;
} else {
sort_arr = [...arr];
sort_arr.sort();
min = sort_arr[0];
idx = arr.indexOf(min);
result[start + idx] = min;
console.log(result.join(""));
dfs([...arr].slice(idx + 1), start + idx + 1);
dfs([...arr].slice(0, idx), start);
}
};
문제풀이
const fs = require("fs");
BOJkey = 0;
let input = fs
.readFileSync(BOJkey ? "./자바스크립트로/16719/input.txt" : "./dev/stdin")
.toString()
.trim();
let min;
let result = new Array(input.length).fill("");
// console.log(result);
S = input.trim().split("");
count = 1;
const dfs = (arr, start) => {
let idx;
if (arr.length == 0) {
return;
} else {
sort_arr = [...arr];
sort_arr.sort();
min = sort_arr[0];
idx = arr.indexOf(min);
result[start + idx] = min;
console.log(result.join(""));
dfs([...arr].slice(idx + 1), start + idx + 1);
dfs([...arr].slice(0, idx), start);
}
};
dfs(S, 0);
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[코테강의/JS] 최대점수 구하기 (0) | 2022.07.07 |
---|---|
[코테강의/JS] 바둑이 승차 (0) | 2022.07.07 |
[코테강의/JS] 합이 같은 부분집합 (0) | 2022.07.06 |
[코테강의/JS] 부분집합 구하기 (0) | 2022.07.06 |
이진트리 순회 (깊이우선탐색) (0) | 2022.07.06 |