- 문제
- 주어진 부등호에 만족하는 부등호 수를 만들어서 리턴하라
- 최대 9개의 부등호가 주어짐
- 부등호 좌,우에는 0~9의 숫자가 1번씩만 들어감
- 그 수를 차례대로 이어붙인 정수를 부등호 수라고 함
- 시도
- 사실 문제를 이해하지 못했다
- 원하는 조건에 맞추어 코드를 어거지로 짜보긴 하였으나, 실패
- 차후에 다시 풀어서 덧붙이록 할 예정
- 수도코드
const inequalityNumber = function (signs) {
let max = [];
let min = [];
let numMin = [0,1,2,3,4,5,6,7,8,9]
let numMax = [9,8,7,6,5,4,3,2,1,0]
for (let i = 0; i < signs.length; i++) {
if (signs[i] === '>' && numMax[i] > numMax[i+1]) {
max.push(numMax[i])
max.push(numMax[i+1])
console.log(max)
} else {
max.push(numMax[i+1])
max.push(numMax[i])
console.log(max)
}
}
for (let i = 0; i < signs.length; i++) {
if (signs[i] === '>' && numMin[i] > numMin[i+1]) {
min.push(numMin[i+1])
min.push(numMin[i])
console.log(min)
} else {
min.push(numMin[i])
min.push(numMin[i+1])
console.log(min)
}
}
return max
};
- 레퍼런스
const inequalityNumber = function (signs) {
const aux = (idx, signs, nums, digits, isVisited) => {
if (idx === signs.length) {
return parseInt(nums.join(''));
}
const sign = signs[idx];
for (let i = 0; i < digits.length; i++) {
const right = digits[i];
if (isVisited[right]) continue;
if (idx >= 0) {
const left = nums[nums.length - 1];
if (sign === '<' && left >= right) continue;
if (sign === '>' && left <= right) continue;
}
isVisited[right] = true;
const target = aux(idx + 1, signs, nums.concat(right), digits, isVisited);
if (target !== undefined) {
return target;
}
isVisited[right] = false;
}
return undefined;
};
signs = signs.split(' ');
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const min = aux(-1, signs, [], digits, Array(10).fill(false));
const max = aux(-1, signs, [], digits.reverse(), Array(10).fill(false));
return max - min;
};