알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳
이라고 정의합니다.
문자열 "edeaaabbccd"를 예시로 들어보면,
외톨이 알파벳
이 아닙니다."ede(aaa)bbccd"
외톨이 알파벳
이 아닙니다.외톨이 알파벳
입니다."e(d)eaaabbcc(d)"
외톨이 알파벳
입니다.문자열 "eeddee"를 예시로 들어보면,
외톨이 알파벳
입니다."(ee)dd(ee)"
외톨이 알파벳
이 아닙니다."ee(dd)ee"
문자열 input_string
이 주어졌을 때, 외톨이 알파벳
들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요. 만약, 외톨이 알파벳
이 없다면 문자열 "N"
을 return 합니다.
input_string
의 길이 ≤ 2,600input_string
은 알파벳 소문자로만 구성되어 있습니다..input_string | result |
---|---|
"edeaaabbccd" | "de" |
"eeddee" | "e" |
"string" | "N" |
"zbzbz" | "bz" |
입출력 예 #1
외톨이 알파벳
인 e, d를 알파벳순으로 이어 붙여 문자열을 만들면 "de"가 됩니다.입출력 예 #2
입출력 예 #3
외톨이 알파벳
이 없습니다.입출력 예 #4
외톨이 알파벳
인 z, b를 알파벳순으로 이어 붙여 문자열을 만들면 "bz"가 됩니다.arr
배열을 초기화합니다. arr
에 첫 번째 문자 input_string[0]
를 넣습니다.input_string[i]
와 arr
의 마지막 요소가 같지 않을 때만 arr
에 추가합니다. 이렇게 하면 연속으로 나타난 문자는 중복을 제거하게 됩니다.new Set(arr)
로 배열 전체의 모든 중복 요소를 제거한 뒤, 알파벳순으로 정렬합니다. 이로써 중복을 제거하고 정렬한 배열인 set
이 생성됩니다.set
을 순회하면서, 각 알파벳이 원래 문자열인 arr
에서 몇 번 등장하는지 세기 위한 카운트를 수행합니다. 이때 count
변수를 초기화하고, arr
을 순회하여 같은 문자를 발견하면 count
를 증가시킵니다.count
가 1을 초과하면 해당 알파벳이 외톨이 알파벳이므로, answer
문자열에 해당 알파벳을 추가합니다.answer
가 빈 문자열일 경우 (즉, 외톨이 알파벳이 없을 경우), 'N'을 반환합니다.✅ 답안
function solution(input_string) {
let answer = '';
const arr = [input_string[0]];
// 뭉쳐있는 알파벳들만 중복 제거
for (let i = 1; i < input_string.length; i++) {
if (input_string[i] !== arr.at(-1)) {
arr.push(input_string[i]);
}
}
// 배열 전체의 모든 중복 요소 제거하고 알파벳 순 정렬
const set = [...new Set(arr)].sort();
for (let i of set) {
let count = 0;
for (let j of arr) {
// 유니크한 set 배열과 부분 중복만 제거한 arr 배열의 요소 같으면 count 증가
if (i === j) count++;
}
// 카운트가 1을 초과하면 외톨이 알파벳이므로 answer에 해당 요소 추가
if (count > 1) answer += i;
}
// 중복 요소가 없었다면 answer는 빈 배열이므로 'N' 반환
return answer === '' ? 'N' : answer;
}