2013-07-18 3 views
3

이 문제를 해결하는 데 어려움이 있습니다.배열의 각 요소가 여러 배열에 있는지 확인

는 각각 1-3 색상과 색상의 6 개 배열이 말할 수 있습니다, 그리고 색상이 반복 될 수있다 :

['white', 'blue'] 
['green', 'yellow'] 
['black'] 
['yellow', 'blue', 'pink'] 
['orange', 'red'] 
['brown', 'white'] 

그리고 사용자 입력 6 색을, 예를 들어 : 블랙, 핑크, 흰색, 파란색 , 오렌지, 노란색. 어떻게 각 색상이 배열의 일부인지 확인하고 각 배열에서 하나만 선택할 수 있다고 가정하면 모든 색상을 선택할 수 있습니다.

제 질문이 이해되기를 바랍니다.

EDIT : 질문 문구를 수정

가 상술 된 바와 같이 6 개 색의 배열이 있으며, 사용자가 각 배열에서 하나를 선택하는

. 그가 제출하는 순서가 배열의 순서가 아니라고 가정하고 사용자의 입력이 올바른지 확인하는 방법.

이것은 재귀 작업과 같은
+0

의견이 있으십니까? 'if'와 함께 2 중첩 된 루프 만? – zerkms

+2

숙제가 있습니까? 숙제와 같아. – Posthuma

+0

문제는 색상이 반복되고 각 배열에서 하나만 선택할 수 있다는 것입니다. 아니, 숙제가 아니라. 그것은 온라인 게임을위한 것입니다. 저는 질문을 쉽게하기 위해 색상을 사용했습니다. –

답변

2

(가장 효율적인하지만 확실히 가장 쉬운 해결책이 될하지 않을 수 있습니다 귀하의 데이터가이 작은 경우는 문제가되지해야한다) :

var check = function(input, colors) { 
    if (!input.length) { 
     return true; 
    } 
    var input_color = input.pop(); 
    var ok = false; 
    for (var i = 0; i < colors.length; i++) { 
     var color = colors[i]; 
     if (!color) { 
      break; 
     } 
     if (color.indexOf(input_color) !== -1) { 
      colors.splice(i, 1); 
      ok = check(input, colors); 
      if (!ok) { 
       colors.splice(i, 0, color); 
      } else { 
       break; 
      } 
     } 
    } 
    if (!ok) { 
     input.push(input_color); 
    } 
    return ok; 
}; 

및 사용을 :

이 두 colorsinputs 배열을 변경하는 것을
var colors = [ 
    ['white', 'blue'], 
    ['green', 'yellow'], 
    ['black'], 
    ['yellow', 'blue', 'pink'], 
    ['orange', 'red'], 
    ['brown', 'white'] 
]; 
check(['white', 'blue', 'pink', 'black', 'orange', 'yellow'], colors); 

주 (당신은 그 (것)의 사본 당신이 check를 호출 할 때마다 확인해야합니다).

사실이 문제는 경로 찾기 문제와 매우 유사합니다. 그리고 이것은 강력한 솔루션입니다.

+0

우수한, 그게 내가 원하는 정확하게 않습니다. 감사! –

관련 문제