문제 이해하기
이번 문제에서는 알파벳 소문자(a~z)만으로 이루어진 두 개의 문자열 s1과 s2를 입력받는 JavaScript 함수를 작성해야 합니다.
함수는 두 문자열에 등장하는 문자들을 활용하여 정렬된 새로운 문자열을 반환해야 합니다. 단, 이 문자열은 다음 조건을 충족해야 합니다.
- 가능한 한 가장 긴 길이를 가져야 합니다.
- 모든 문자는 서로 달라야 하며(중복 제거), 각 문자는 딱 한 번만 포함되어야 합니다.
- 문자들은 s1 또는 s2 어느 쪽에서든 가져올 수 있습니다.
해결 접근 방식
이 문제를 해결하는 핵심 흐름은 다음과 같습니다.
- 두 문자열을 하나로 합칩니다(concat).
- 합쳐진 문자열을 소문자로 변환하여 일관성을 유지합니다.
- 문자열을 개별 문자 배열로 분리한 뒤 사전순으로 정렬합니다.
- 반복문을 돌며 이미 결과 배열에 없는 문자만 추가하여 중복을 제거합니다.
- 마지막으로 배열을 다시 하나의 문자열로 합쳐 반환합니다.
구현 코드
위 접근 방식을 적용한 코드는 다음과 같습니다.
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('')처럼 한 줄로 처리할 수도 있으니, 상황에 맞게 선택하시면 됩니다.