-
[릿코드 / js] 332. Reconstruct Itinerary코딩테스트 2023. 9. 14. 16:49
var findItinerary = function(tickets) { //1.출발점이 JFK인 친구 뽑아냄. //2.도착점 알파벳순으로 정렬하여 제일 처음인 친구로 감. //3. 재귀와 while을 섞어야할듯...? let output = []; tickets.sort(); return recurr(tickets, "JFK", output); }; let check = function(tickets, departure) { if (tickets.length === 0) return true; for (let i = 0; i < tickets.length; i++) { if (tickets[i][0] === departure) { return (check([...tickets.slice(0,i),...tickets.slice(i+1)], tickets[i][1])) } } return false; } let recurr = function(tickets, departure, output) { output.push(departure) if (tickets.length === 0) return output; tickets.sort(); for (let i = 0; i < tickets.length; i++) { if (tickets[i][0] === departure ) { if (check([...tickets.slice(0,i),...tickets.slice(i+1)], tickets[i][1])) { return recurr([...tickets.slice(0,i),...tickets.slice(i+1)], tickets[i][1], output) } } } return output }
-> 백트래킹이 어려워서 백트래킹을 무려 두번하는... 대 참사가 발생함
var findItinerary = function(tickets) { let output = []; tickets.sort(); return recurr(tickets, "JFK", output, 0); }; let recurr = function(tickets, departure, output) { output.push(departure); if (tickets.length === 0) return output; for (let i = 0; i < tickets.length; i++) { if (tickets[i][0] === departure ) { if (recurr([...tickets.slice(0,i),...tickets.slice(i+1)], tickets[i][1], output)) { return output; } } } output.pop(); return false }
--> 수정버전
처음에 output을 push하되, recur조건에 충족하지 않으면 pop을해서 취소해줌.
'코딩테스트' 카테고리의 다른 글
[릿코드/js] 1584. Min Cost to Connect All Points (0) 2023.09.16 [릿코드/js] 다시풀기 334. Increasing Triplet Subsequence (0) 2023.09.15 [릿코드/js] 151. reverse words in string (0) 2023.09.14 [릿코드/js] 다시풀기 345 (0) 2023.09.13 [릿코드/js] 605. can place flowers (0) 2023.09.13