Problem
- Write a function which will take an array of strings and returns an array of strings with the needless directions removed.
- 불필요한 방향이 제거된 문자열 배열을 반환한다.
Solution 01
function dirReduc(arr) {
let count = 0;
for (let i = 0; i < arr.length; i++) {
if (
arr[i] === 'EAST' && arr[i + 1] === 'WEST' ||
arr[i] === 'WEST' && arr[i + 1] === 'EAST' ||
arr[i] === 'NORTH' && arr[i + 1] === 'SOUTH' ||
arr[i] === 'SOUTH' && arr[i + 1] === 'NORTH'
) {
arr.splice(i, 2);
count++;
i--;
}
}
return count === 0 ? arr : dirReduc(arr);
}
dirReduc(['NORTH', 'SOUTH']); // []
dirReduc(['NORTH', 'SOUTH', 'EAST', 'WEST']); // []
dirReduc(['NORTH', 'WEST', 'SOUTH', 'EAST']); // ['NORTH', 'WEST', 'SOUTH', 'EAST']
dirReduc(['NORTH', 'SOUTH', 'EAST']); // ['EAST']
Solution 02
function dirReduc(arr) {
const opposite = {
EAST: 'WEST',
WEST: 'EAST',
NORTH: 'SOUTH',
SOUTH: 'NORTH'
};
return arr.reduce((result, i) => {
if (result[result.length - 1] === opposite[i]) {
result.pop();
} else {
result.push(i);
}
return result;
}, []);
}
dirReduc(['NORTH', 'SOUTH']); // []
dirReduc(['NORTH', 'SOUTH', 'EAST', 'WEST']); // []
dirReduc(['NORTH', 'WEST', 'SOUTH', 'EAST']); // ['NORTH', 'WEST', 'SOUTH', 'EAST']
dirReduc(['NORTH', 'SOUTH', 'EAST']); // ['EAST']
Solution 03
function dirReduc(arr) {
const opposite = {
EAST: 'WEST',
WEST: 'EAST',
NORTH: 'SOUTH',
SOUTH: 'NORTH'
};
return arr.reduce((result, i, index) => {
opposite[result.slice(-1)] === i ? result.pop() : result.push(i);
return result;
}, []);
}
dirReduc(['NORTH', 'SOUTH']); // []
dirReduc(['NORTH', 'SOUTH', 'EAST', 'WEST']); // []
dirReduc(['NORTH', 'WEST', 'SOUTH', 'EAST']); // ['NORTH', 'WEST', 'SOUTH', 'EAST']
dirReduc(['NORTH', 'SOUTH', 'EAST']); // ['EAST']