문제
배열 arr을 첫 번째이자 유일한 인수로 사용하는 JavaScript 함수를 작성해야 합니다.
배열 arr은 다음 두 종류 중 하나의 문자열 방정식으로 구성됩니다. -
-
'X ===Y'
-
X!==Y'
여기서 X와 Y는 임의의 변수가 될 수 있습니다.
우리 함수는 배열의 모든 방정식에 대해 배열의 모든 방정식이 참이 되도록 일부 숫자를 할당할 수 있는지 여부를 확인해야 합니다.
예를 들어, 함수에 대한 입력이 -
인 경우const arr = ['X===Y', 'Y!==Z', 'X===Z'];
그러면 출력은 다음과 같아야 합니다. -
const output = false;
출력 설명:
우리가 X, Y, Z에 대해 어떤 값을 선택하든 상관없이 세 방정식은 모두 만족될 수 없습니다.
예시
이에 대한 코드는 -
const arr = ['X===Y', 'Y!==Z', 'X===Z']; const validateEquations = (arr = []) => { const map = {}; const len = {}; const inValids = []; const find = (item) => { while(map[item] && item !== map[item]){ map[item] = map[map[item]]; item = map[item]; }; return item; }; const add = (a, b) => { const first = find(a); const second = find(b); if(first === second){ return; }; if(len[first] < len[second]){ map[first] = second; len[second] += len[first]; }else{ map[second] = first; len[first] += len[second]; } } arr.forEach((item) => { const X = item[0]; const Y = item[4]; map[X] = map[X] || X; map[Y] = map[Y] || Y; len[X] = len[X] || 1; len[Y] = len[Y] || 1; if(item[1] === '!'){ inValids.push([X, Y]); }else{ add(X, Y); }; }); return inValids.every(([a, b]) => find(a) !== find(b)) }; console.log(validateEquations(arr));
출력
콘솔의 출력은 -
false