Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 배열에서 반대 방향 움직임 상쇄하기

문제

단일 문자들로 이루어진 배열 arr을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.

이 배열에는 다음 네 가지 문자만 포함될 수 있습니다.

  • 'N' → 북쪽(North) 방향을 의미합니다.
  • 'S' → 남쪽(South) 방향을 의미합니다.
  • 'W' → 서쪽(West) 방향을 의미합니다.
  • 'E' → 동쪽(East) 방향을 의미합니다.

각 문자는 해당 방향으로 단위 거리만큼 이동한다는 뜻입니다. 그리고 배열 안 어디에서든 서로 반대되는 두 방향, 즉 ('S'와 'N') 또는 ('E'와 'W')가 인접해 있으면 두 이동은 서로를 상쇄합니다. 따라서 우리가 만들 함수는 배열 전체의 최종 이동 방향을 계산해 반환해야 합니다.

예를 들어 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.

입력

const arr = ['N', 'S', 'S', 'E', 'W', 'N', 'W'];

출력

const output = 'W';

출력 설명

먼저 'N'과 'S'가 서로 상쇄되고, 이어서 'E'와 'W'도 서로 상쇄됩니다. 그 후 남아 있던 'N'과 'S'가 한 번 더 상쇄되면서 최종적으로 'W' 하나만 남게 됩니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다.

const arr = ['N', 'S', 'S', 'E', 'W', 'N', 'W'];
const cancelDirections = (arr = []) => {

    let str = arr.join('');
    while(str.includes('NS') || str.includes('SN') || str.includes('EW') || str.includes('WE')){
        str = str.replace('NS', '');
        str = str.replace('SN', '');
        str = str.replace('EW', '');
        str = str.replace('WE', '');
    };
    return str.split('');
};
console.log(cancelDirections(arr));

코드 동작 원리

이 코드는 다음 단계로 동작합니다.

  1. arr.join('')으로 배열을 하나의 문자열로 합칩니다.
  2. while 반복문을 사용해 문자열에 서로 반대되는 방향 쌍('NS', 'SN', 'EW', 'WE')이 존재하는지 확인합니다.
  3. replace() 메서드는 기본적으로 첫 번째로 발견된 패턴만 제거하므로, 상쇄 가능한 모든 쌍이 사라질 때까지 반복문을 계속 실행합니다.
  4. 더 이상 상쇄할 쌍이 없으면 split('')으로 문자열을 다시 배열로 변환해 반환합니다.

출력 결과

['W']