본문 바로가기
dev/javascript

[javascript] 자바스크립트 문자열 뒤집기 (reverse string)

by 최연탄 2023. 5. 16.
728x90
반응형

참고: https://sarahchima.com/blog/reverse-a-string/

문자열 뒤집기 문제는 쉽게 접할 수 있는 알고리즘 문제입니다. 이 포스트에서는 문자열 뒤집기 알고리즘에 대해 네 가지 JavaScript 솔루션을 알아보겠습니다.

솔루션 1. 배열의 reverse() 메소드 사용하기

Array.reverse() 메소드 덕에 큰 스트레스 없이 배열을 뒤집을 수 있습니다. reverse() 메소드는 배열을 그 자리에서 뒤집습니다. 말 그대로 원본 배열의 첫 번째 요소가 마지막이 되고 마지막 요소가 첫 번째로 바뀝니다.

우리는 문자열로 작업하고 있기 때문에 split() 메소드를 사용하여 문자열을 배열로 변환하고 reverse() 메소드를 사용하여 배열을 뒤집은 다음 join() 메소드를 사용하여 배열을 다시 문자열로 변환할 것 입니다. 다음은 코드 예제입니다:

function reverseString(string) {
	let array = string.split("");
 
  	array.reverse()

  	return array.join("")
}

위의 함수는 화살표 표기법을 통해 한 줄 짜리로 변환할 수 있습니다.

const reverseString = (string) => string.split("").reverse().join("");

솔루션 2. 내 친구 for 루프

이 솔루션은 문자열을 뒤집는 전형적인 예제입니다. 이러한 문제를 만나면 가장 먼저 떠오르는 방법 중 하나입니다.

여기서 할 일은 뒤집힌 문자열을 저장할 빈 문자열을 만들고 뒤집힐 문자열의 뒷 부분 부터 반복하여 빈 문자열의 시작 부분에 추가하는 것 입니다.

function reverse(str) {
    let reverseString = "";

   	for (let character of str) {
        reverseString = character + reverseString;
    }

    return reverseString;
}

솔루션 3. Array.reduce() 메소드 사용

reduce() 메소드는 배열의 각 요소에 대해 리듀서 함수를 실행하여 단일 출력 값을 생성해 내는 함수입니다. reduce() 메소드를 사용하려면 문자열을 배열로 변환해야 합니다. 다음으로는 reduce() 메소드를 사용하여 문자열을 뒤집습니다. 우리의 경우 리듀서에서 문자열의 각 문자를 반전시켜 아래 reversed로 이름 붙인 accumulator에 추가합니다. 

function reverseString(string) {
	const array = string.split('');

	const reversedString = array.reduce((reversed, character) => {
    	return character + reversed
	}, '')

	return reversedString;
}

위의 함수는 다음과 같이 축양할 수 있습니다.

const reverseString = (string) => {
	return string.split('').reduce((reversed, character) => character + reversed, '');
}

reduce() 메소드를 사용한 한 줄 짜리 압축 버전은 다음과 같습니다.

const reverseString = (string) => string.split('').reduce((rev, char) => char + rev, '');

솔루션 4. 재귀함수 사용

재귀 함수를 많이 다뤄봤나요? 그렇지 않다면 살짝 설명하겠습니다. 재귀적 방법론이란 자기 자신을 호출하는 함수를 사용하여 문제를 해결하는 방법입니다. 함수가 자신을 호출할 때마다 문제가 하위 단위로 축소됩니다. 이러한 재귀 함수는 하위 단위로 축소된 문제가 해결될 때 까지 계속 자신을 호출하여 문제를 하위 단위로 나눕니다.

재귀 함수의 가장 중요한 부분은 종료 조건 설정입니다. 이는 무한 루프가 발생하지 않도록 재귀 호출을 종료 시키는 조건입니다.

다시 문자열 뒤집기 문제로 돌아와서 종료 조건은 주어진 문자열이 비었을 때 입니다. string.substring() 메소드를 사용하여 주어진 문자열의 첫 번째 문자를 제거하고 그 값을 재귀 호출 한 다음 그 뒤에 두 번째 였었던 문자를 붙입니다.

function reverse(string) {
    if(string === ""){
        return string;
    } else {
        return reverse(string.substring(1)) + string[0];
    }
}

if-else 문 대신에 삼항 연산자를 사용하여 다음과 같이 축약할 수 있습니다.

function reverse(string) {
 	return string ? reverse(string.substring(1)) + string[0] : string;
}

관련 글

자바스크립트 문자열 배열로 자르기

자바스크립트 반복문 루프

자바스크립트 문자열 내의 문자열 찾기

반응형

댓글