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

JavaScript에서 문자열의 단어 순서 반전하기


문자열을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열에 포함된 단어들의 순서를 거꾸로 뒤집은 새로운 문자열을 반환해야 합니다.

여기에는 한 가지 조건이 있습니다. 바로 자바스크립트의 내장 배열 메서드인 reverse()를 사용하지 않고 문제를 해결해야 한다는 점입니다.

예시

입력 문자열이 다음과 같다고 가정해 보겠습니다.

const str = 'this is a string';

그렇다면 함수는 아래와 같은 출력 문자열을 반환해야 합니다.

'string a is this'

구현 코드

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

const str = 'this is a string';
const reverseWordOrder = (str = '') => {
    const strArr = str.split(' ');
    let temp = '';
    const { length } = strArr;
    for(let i = 0; i < length / 2; i++){
        temp = strArr[i];
        strArr[i] = strArr[length - 1 - i];
        strArr[length - 1 - i] = temp;
    };
    return strArr.join(' ');
};
console.log(reverseWordOrder(str));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

string a is this

코드 동작 원리

이 코드가 어떻게 작동하는지 단계별로 살펴보겠습니다.

1. 문자열을 배열로 분리

split(' ') 메서드를 사용하면 공백을 기준으로 문자열을 잘라 각 단어를 요소로 가지는 배열을 만들 수 있습니다. 예를 들어 'this is a string'['this', 'is', 'a', 'string']이라는 배열로 변환됩니다.

2. 양 끝 요소 교환(Swap)

배열 길이의 절반만큼만 반복문을 실행하면서, 첫 번째 요소와 마지막 요소, 두 번째 요소와 뒤에서 두 번째 요소를 차례로 맞바꿉니다. 이때 임시 변수 temp를 활용해 값이 손실되지 않도록 합니다. 이러한 방식은 흔히 '투 포인터(Two Pointer)' 기법이라고 불립니다.

3. 배열을 다시 문자열로 결합

순서가 뒤바뀐 배열을 join(' ') 메서드로 공백을 사이에 두고 하나의 문자열로 합쳐 반환합니다.

이 방식은 reverse() 메서드 없이도 O(n)의 시간 복잡도로 문자열의 단어 순서를 효율적으로 반전할 수 있어, 코딩 인터뷰에서 자주 등장하는 유형의 문제를 해결하는 데 유용합니다.