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

JavaScript로 두 문자열에서 공통되지 않은 문자를 찾아 반환하는 방법

문제 정의

두 개의 문자열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수의 목표는 두 문자열 중 어느 한쪽에만 존재하고 양쪽에 공통으로 나타나지 않는 문자들만 모아 새로운 문자열로 반환하는 것입니다.

예를 들어, 첫 번째 문자열에만 있는 문자와 두 번째 문자열에만 있는 문자를 모두 수집하되, 두 문자열 모두에 등장하는 문자는 제외해야 합니다.

해결 접근 방식

가장 직관적인 방법은 다음과 같습니다.

1. 첫 번째 문자열을 순회하면서 각 문자가 두 번째 문자열에 존재하는지 확인합니다.
2. 존재하지 않는 문자라면 결과 배열에 추가합니다.
3. 같은 방식으로 두 번째 문자열도 순회하며 첫 번째 문자열에 없는 문자를 추가합니다.
4. 마지막으로 결과 배열을 하나의 문자열로 합쳐 반환합니다.

문자열 포함 여부는 includes() 메서드를 활용하면 간단하게 처리할 수 있습니다.

예제 코드

다음은 위 접근 방식을 구현한 전체 코드입니다.

const str1 = "xyab";
const str2 = "xzca";

const findUncommon = (str1 = '', str2 = '') => {
  const res = [];

  // str1에는 있지만 str2에는 없는 문자 추출
  for (let i = 0; i < str1.length; i++) {
    if (!(str2.includes(str1[i]))) {
      res.push(str1[i]);
    }
  }

  // str2에는 있지만 str1에는 없는 문자 추출
  for (let i = 0; i < str2.length; i++) {
    if (!(str1.includes(str2[i]))) {
      res.push(str2[i]);
    }
  }

  return res.join("");
};

console.log(findUncommon(str1, str2));

출력 결과

ybzc

코드 동작 원리

위 예제에서 str1"xyab", str2"xzca"입니다.

- 'x''a'는 두 문자열 모두에 존재하므로 제외됩니다.
- 'y''b'는 첫 번째 문자열에만 있으므로 결과에 포함됩니다.
- 'z''c'는 두 번째 문자열에만 있으므로 결과에 포함됩니다.

따라서 최종 출력은 ybzc가 됩니다.

시간 복잡도 참고 사항

이 구현은 이중 반복문처럼 보이지만 실제로는 includes() 내부에서 선형 탐색이 발생하므로 시간 복잡도는 O(n×m)입니다. 문자열이 매우 길다면 Set 객체를 활용해 각 문자열의 문자를 미리 저장하면 조회 속도를 O(1)로 개선할 수 있습니다.