문자열 s
가 매개변수로 주어집니다. s
에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
s
의 길이 < 1,000s
는 소문자로만 이루어져 있습니다.s | result |
---|---|
"abcabcadc" | "d" |
"abdc" | "abcd" |
"hello" | "eho" |
입출력 예 #1
입출력 예 #2
입출력 예 #3
💡 문제풀이 과정
- 답안 1번: 주어진 문자열
s
의 문자들 마다 몇 번씩 카운트 되는지 반복문과new Set()
을 이용하여,2차원 배열
의 형태로 담아서 풀이하였다. 하지만.. 이러한 방식은오브젝트
를 이용 했다면 더 간단했던 문제라 답안 2번도 참고할 것.- 답안 2번:
object
를 이용하여 중복된 문자들을 카운팅하고value가 1인 것
을 반환한다.- 답안 3번:
filter
와match
및정규표현식
을 사용한 다른 사람의 풀이이다. 주어진 문자열s
의 요소들과[…s]
의 원소들 중매칭되는 것의 length가 1인 경우
를 배열 형태로 반환하면 오름 차순 정렬하고 문자열로 이어 붙여 리턴한다.
✅ 답안 #1
function solution(s) {
let arr = [];
[...new Set(s)].sort().map((v) => arr.push([v, 0]));
// s를 중복되지 않은 배열의 형태로 복사 후 2차원 배열 형태로 arr에 담는다.
// ex. [[s의 원소1, 카운트할 수], [s의 원소2, 카운트할 수], ...]
for (let i of s) arr.map((v) => (v[0] == i ? v[1]++ : 0));
// s의 원소가 arr의 원소[0]가 같으면 arr의 원소[1]에 1씩 더한다.
return arr.map((v) => (v[1] == 1 ? v[0] : "")).sort().join("");
// 카운팅된 수가 1이면 해당 문자들을, 아니면 빈 문자열을 배열 형태로 반환.
// 오름 차순 정렬 후 배열 형태 문자열로 연결하여 반환.
}
✅ 답안 #2
function solution(s) {
const obj = {};
for (const i of s) obj[i] = (obj[i] || 0) + 1;
// s의 문자들을 객체 key값으로 추가, value: 기본값 0이고 key값 중복될 때마다 1씩 더함.
return Object.keys(obj)
.filter((key) => obj[key] == 1).sort().join("");
// 객체 value가 1인 것만 배열 형태로 반환 후 정렬 및 문자열로 리턴.
}
✅ 답안 #3
function solution(s) {
return [...s]
.filter((char) => s.match(new RegExp(char, "g")).length == 1)
.sort()
.join("");
}