[21/10/01 KATA NINJA] permutations

9404 단어 codekatacodekata

복습 겸, 감 잡을겸 풀어보았다.

내 풀이


var permute = function(nums) {
    return DFS([]);
    
    function DFS(visited){
        
        if(visited.length === nums.length) return [visited.map(i=>nums[i])];
        
        const result = []
        
        for(let check = 0;check<nums.length;check++){
            // 방문이 완료된 인덱스는 유망하지 않으므로 가지치기. 
            if(!visited.includes(check)){
                // 방문이 안된 인덱스만 방문한다.
                result.push(...DFS([...visited,check]));
                
            }
        }
        
        return result;
    }
};

또 다른 풀이

array의 내장함수를 이용하면 더 빠르게 풀 수 있다.

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    const finish = nums.length;
    
    return DFS([],[...nums]);
    
    function DFS(stack,nums){
        
        if(stack.length === finish){
            
            return [stack]
        }
        
        const result = [];
        
        
        for(let i=0;i<nums.length;i++){
            const data = [...nums];
            
          // 넣을 데이터는 배열에서 제외시켜버린다.
            data.splice(i,1);
            
          
          // 다음 배열은 넣은 데이터가 삭제된 배열에서 하나를 뽑는 것임.
            result.push(...DFS([...stack,nums[i]],data));
            
        }
        
        return result;
    }
};

?

다음 코드를
    return DFS([],[...nums]);
아래 코드로 변경하면
	return DFS([],nums);

속도가 더 느리다.

why...? 조회하는데 시간이 더 걸려서 인건가..?

아는 사람이 있다면 댓글로 부탁드림미다...

좋은 웹페이지 즐겨찾기