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

JavaScript로 두 문자열에서 만들 수 있는 가장 긴 고유 문자열 구하기

문제 이해하기

이번 문제에서는 알파벳 소문자(a~z)만으로 이루어진 두 개의 문자열 s1과 s2를 입력받는 JavaScript 함수를 작성해야 합니다.

함수는 두 문자열에 등장하는 문자들을 활용하여 정렬된 새로운 문자열을 반환해야 합니다. 단, 이 문자열은 다음 조건을 충족해야 합니다.

  • 가능한 한 가장 긴 길이를 가져야 합니다.
  • 모든 문자는 서로 달라야 하며(중복 제거), 각 문자는 딱 한 번만 포함되어야 합니다.
  • 문자들은 s1 또는 s2 어느 쪽에서든 가져올 수 있습니다.

해결 접근 방식

이 문제를 해결하는 핵심 흐름은 다음과 같습니다.

  1. 두 문자열을 하나로 합칩니다(concat).
  2. 합쳐진 문자열을 소문자로 변환하여 일관성을 유지합니다.
  3. 문자열을 개별 문자 배열로 분리한 뒤 사전순으로 정렬합니다.
  4. 반복문을 돌며 이미 결과 배열에 없는 문자만 추가하여 중복을 제거합니다.
  5. 마지막으로 배열을 다시 하나의 문자열로 합쳐 반환합니다.

구현 코드

위 접근 방식을 적용한 코드는 다음과 같습니다.

const str1 = "xyaabbbccccdefww";
const str2 = "xxxxyyyyabklmopq";

const longestPossible = (str1 = '', str2 = '') => {
   // 두 문자열을 하나로 결합
   const combined = str1.concat(str2);
   // 소문자로 변환 후 개별 문자 배열로 분리
   const lower = combined.toLowerCase();
   const split = lower.split('');
   // 사전순 정렬
   const sorted = split.sort();
   const res = [];
   // 중복되지 않은 문자만 결과 배열에 추가
   for (const el of sorted) {
      if (!res.includes(el)) {
         res.push(el);
      }
   }
   return res.join('');
};

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

출력 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

abcdefklmopqwxy

코드 설명 및 개선 팁

입력 예시를 살펴보면, str1에는 'x', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'w'가, str2에는 'x', 'y', 'a', 'b', 'k', 'l', 'm', 'o', 'p', 'q'가 포함되어 있습니다. 두 문자열의 모든 고유 문자를 합치고 사전순으로 정렬하면 abcdefklmopqwxy가 됩니다.

참고로, Set 객체를 활용하면 중복 제거 로직을 더 간결하게 표현할 수 있습니다. 예를 들어 [...new Set(combined)].sort().join('')처럼 한 줄로 처리할 수도 있으니, 상황에 맞게 선택하시면 됩니다.