16719번: ZOAC
2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로
www.acmicpc.net
배운점
이 문제 정말 맞왜틀 정말 왜 안돌아가는지..
결국 원인을 찾아냈다. 코드를 보면 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 |