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

자바스크립트에서 배열 인덱스를 기반으로 문자열 섞는 방법

이번 글에서는 문자열과 양의 정수 배열을 입력받아, 각 문자를 지정된 위치로 이동시켜 새로운 문자열을 만드는 자바스크립트 함수를 작성해 보겠습니다.

함수는 첫 번째 인자로 문자열(str)을, 두 번째 인자로 문자열과 길이가 같은 양의 정수 배열(arr)을 받습니다. 그리고 섞인 결과 문자열에서 원래 i번째 위치에 있던 문자가 arr[i] 위치로 이동하도록 재배열해야 합니다.

문제 예시

예를 들어 입력 문자열과 배열이 다음과 같다고 가정해 보겠습니다.

const str = 'example';
const arr = [5, 2, 0, 6, 4, 1, 3];

각 문자의 목표 위치를 살펴보면 다음과 같습니다.

  • 'e'(인덱스 0) → 위치 5
  • 'x'(인덱스 1) → 위치 2
  • 'a'(인덱스 2) → 위치 0
  • 'm'(인덱스 3) → 위치 6
  • 'p'(인덱스 4) → 위치 4
  • 'l'(인덱스 5) → 위치 1
  • 'e'(인덱스 6) → 위치 3

따라서 기대하는 출력 결과는 다음과 같습니다.

const output = 'alxepem';

구현 아이디어

이 문제는 Map 객체를 활용하면 깔끔하게 해결할 수 있습니다. 먼저 원본 문자열의 각 문자를 목표 인덱스와 함께 Map에 저장한 뒤, 인덱스 0부터 순서대로 문자를 꺼내어 새 문자열을 조립하면 됩니다.

코드 구현

다음은 위 로직을 구현한 전체 코드입니다.

const str = 'example';
const arr = [5, 2, 0, 6, 4, 1, 3];
const shuffleString = (str = '', arr = []) => {
   let res = '';
   const map = new Map();
   for (let i = 0; i < arr.length; i++) {
      const char = str.charAt(i), index = arr[i]
      map.set(index, char)
   };
   for (let i = 0; i < arr.length; i++){
      res += map.get(i);
   };
   return res;
};
console.log(shuffleString(str, arr));

동작 과정

  1. 첫 번째 반복문에서 문자열의 각 문자(charAt(i))를 읽고, 배열에서 해당 문자의 목표 위치(arr[i])를 가져옵니다.
  2. Map에는 '목표 인덱스 → 문자' 형태로 데이터가 저장됩니다. 예를 들어 map.set(5, 'e')처럼 저장됩니다.
  3. 두 번째 반복문에서 인덱스 0부터 마지막까지 순서대로 Map에서 문자를 꺼내 결과 문자열에 이어 붙입니다.

출력 결과

콘솔 실행 결과는 다음과 같습니다.

alxepem

이 방식은 두 번의 선형 순회만 사용하므로 시간 복잡도는 O(n)이며, 추가로 Map 하나만 사용하므로 공간 복잡도 역시 O(n)으로 효율적입니다.