작성
·
270
·
수정됨
0
branch 변수에 분기가 이뤄지는 ticket의 인덱스를 저장해서 더 이상 사용할 ticket이 없으면 분기되는 공항으로 이동할 수 있게 만들었는데, 프로그래머스에서 제공하는 팁을 참고하더라도 유일하게 테케1에서만 계속 틀렸다고(런타임 에러X) 나오네요...
혹시 제 코드 봐주실 수 있을까요?
https://school.programmers.co.kr/learn/courses/30/lessons/43164?language=javascript
function solution(tickets) {
let candid = [];
let used = new Array(tickets.length).fill(false);
let branch = new Map();
// tickets, used, stack
let stack = [];
for(let i=0; i<tickets.length; i++) {
if(tickets[i][0] === "ICN") {
stack.push(i);
}
if(!branch.has(tickets[i][0])) {
let arr = [];
arr.push(i);
branch.set(tickets[i][0], arr);
} else {
branch.get(tickets[i][0]).push(i);
}
}
for(let [key, value] of branch) {
if(value.length < 2) {
branch.delete(key);
}
}
DFS(used, tickets, branch, stack, candid);
let answer = [];
for(let i=0; i<candid.length; i++) {
const path = candid[i].split(",");
let arr = [];
arr.push("ICN");
for(let j=0; j<path.length; j++) {
arr.push(tickets[path[j]][1]);
}
answer.push(arr);
}
if(answer.length > 1) {
answer = answer.sort((a, b) => {
if(a<b) return -1;
else if(a>b) return 1;
});
}
return answer[0];
}
function DFS(used, tickets, branch, stack, candid) {
let path = [];
while(stack.length > 0) {
let index = stack.pop();
path.push(index);
used[index] = true;
const start = tickets[index][1]; // 도착지를 출발지로 설정
let added = false;
for(let i=0; i<tickets.length; i++) {
if(!used[i] && tickets[i][0] === start) {
stack.push(i);
added = true;
}
}
if(!used.includes(false)) {
candid.push(path.toString());
path = find_children(stack[stack.length-1], tickets, branch, path, used)
} else if(!added) {
// 사용되지 않은 것이 아직 있는 데도 추가가 안된 것은
// 더 이상 순회할 것이 없음을 암시
path = find_children(stack[stack.length-1], tickets, branch, path, used)
}
}
}
function find_children(idx, tickets, branch, path, used) {
if(idx === undefined) {
return [];
}
let children = branch.get(tickets[idx][0]);
for(let i=0; i<children.length; i++) {
if(children[i] !== idx) {
const branch_idx = path.indexOf(children[i]);
let reset = path.slice(branch_idx);
for(let j=0; j<reset.length; j++) {
used[reset[j]] = false;
}
path = path.slice(0, branch_idx);
return path;
}
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
해당 코드를 보니 DFS 알고리즘을 사용하여 여행 경로를 찾는 코드로 보이네요.
문제에 대해서는 따로 언급하지 않으셨는데, 특정 테스트 케이스에서 오류가 발생하고 있다고 하셨죠? 해당 테스트 케이스가 어떤 것인지 알려주실 수 있나요?
전체적으로 코드는 보기 좋고 깔끔하게 작성되어 있어서 딱히 문제가 보이지 않았습니다. 그러나 branch라는 변수의 용도를 명확히 하지 않았는데, 이 부분에서 문제가 발생할 수 있습니다.
추가적으로, sort 함수에서 return 구문을 명시해 주지 않으면 undefined가 반환될 수 있습니다.
해당 내용도 수정하시면 될 것 같습니다. 코드 수정 후 문제가 해결되지 않으면 다시 문의해주세요. 감사합니다.