[A-Z] 자바스크립트 자주 출제되는 알고리즘 문제 - 1. 문제 역순 String Reversal
본문 바로가기

Algorithm

[A-Z] 자바스크립트 자주 출제되는 알고리즘 문제 - 1. 문제 역순 String Reversal

728x90
반응형

 

 

 

시작하며

 

들어가기 앞서, 해당 블로그 내용은 현재 제가 구독하고 있는 siliconwat의 미디엄 블로그 글을 번역과 동시에 재해석하는 글임을 밝힙니다.

 

해당 자료는 아래 링크에서 참고할 수 있습니다 🫡

 

 

Algorithms in JavaScript

40 Problems, Solutions, and Explanations

medium.com

 


 

 

원래 저는 전 직장에 근무할때만 하더라도 알고리즘 문제를 푸는 것이 업무적으로 그다지 도움이 된다고 생각을 하지 않았어요.

 

그러다가 백엔드 개발자들과 협업 및 코드리뷰를 진행하면서,

 

각자 다른 코딩 스타일과 해결 방법이 있고 최적의 방법을 찾기 위해서는 많은 문제를 풀어봐야겠다는 생각이 들어 해당 글을 작성하게 되었습니다.

 

출제가 자주되는 자바스크립트의 알고리즘을 쉬운 문제부터 어려운 문제까지 총 22문제를 시리즈로 게재해보려고 합니다!

 

 

 


 

 

 

1. 문자 역순 String Reversal

 

주어진 문자열을 입력으로 받아서, 문자들을 역순으로 바꿔서 반환하는 함수를 작성하는 문제입니다.

 

간단하게 말하면, 'Sohyun'이라는 이름 문자열을 역순으로 'nuyhoS' 리턴시키는 방법을 말합니다.

 

 

 

Analysis:

 

문자 역순 알고리즘은 간단한 자바스크립트 빌트인 reverse 메소드로 해결 가능해요.

 

문자열에서 split 메서드를 사용해 문자의 배열을 생성한 후,

 

역순 메서드를 적용, join 메서드를 사용하여 문자들을 다시 하나의 문자열로 결합할 수 있습니다.

 

 

 

 

 

 

해당 코드를 돌려보면, 원하는 !dlroW ,olleH 값이 리턴이 되었지만 덜 우아해보이죠?

 

이 문제는 ECMA의 최신 구문(for of 루프)과 헬퍼 메서드를 사용하여 해결될 수도 있습니다.

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...of

 

 

 

 

 

 

두번째 방법은 string 인풋 값에 있는 첫번째 인덱스의 캐릭터부터 열거를 반복해서 result 변수 안에 저장을 시켜줌으로,

 

가장 먼저 들어온 캐릭터는 result 스트링의 마지막에서부터 차례대로 보여지게 됩니다.

 

또는 세번째 방법으로는 임시 변수를 유지할 필요 없이 배열의 Array.prototype.reduce() 메서드를 사용할 수도 있습니다.

 

 

 

 

 

 

reduce 메소드는 각 배열에 주어진 reducer 함수를 실행하고 하나의 결과를 반환합니다.

 

함수의 첫번째 인자인 result는 accumulator로 누산기이기 때문에

 

콜백의 이전 반환값 또는 첫 번째 호출이면서 initialValue라면 initialValue를 가지게 되고, 두번째 인자인 character는 현재 value입니다. 

 

해당 스트링의 split에 의한 모든 배열에 존재하는 element들이 reducer 함수에 의해 실행된 후 하나의 결과값으로 반환되게 됩니다. (!dlroW ,olleH)

 

 

 

문자열의 문자마다 한 번씩 방문해야 합니다. 비록 이 과정이 여러 번 반복되지만, 시간 복잡도는 선형으로 정규화됩니다. 또한 별도의 내부 데이터 구조를 유지하지 않기 때문에 공간 복잡도는 상수입니다.

 

 

 


 

반응형