문제 설명
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
제한 사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
입출력 예
s | result |
"abcabcadc" | "d" |
"abdc" | "abcd" |
"hello" | "eho" |
입출력 예 설명
입출력 예 #1
- "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
입출력 예 #2
- "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
입출력 예 #3
- "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
풀이
// 내 풀이
function solution(s) {
const arrString = s.split('').sort()
return arrString.reduce((acc, cur) => {
const reg = new RegExp(`(${cur})\\1+`)
if (!reg.test(arrString.join(''))) acc += cur
return acc
}, '')
}
// 상상도 못했던 다른 사람의 풀이
function solution(s) {
let res = [];
for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
return res.sort().join('');
}
내 생각 & 아무 말
나는 해당 문제를 보자마자 해당 문자열을 정렬해서 앞에서부터 연속된 글자들을 지워나가야겠다고 생각했다.
정규식을 사용할까? 아니면 코드를 작성할까? 고민하다가 정규식을 선택했다.
여차저차 풀고 난 뒤 다른 사람은 어떻게 풀었을까 너무 궁금해져서 한번 봤더니 정말 발상의 전환 그 자체였다.
문자열 중 한글자 씩 체크를 하는데, 어떤 체크를 하느냐면 가장 첫번째로 찾은 해당 문자의 인덱스와 가장 마지막으로 찾은 해당 문자의 인덱스가 같다면 해당 글자를 반환하는 형태였다. 나 처럼 정렬을 하지도 않고, 복잡한 정규식을 사용하지 않았는데도 불구하고 정말 쉽게 풀어내셨다.
정말 세상에는 고수가 많다. 나도 화이팅
피드백은 언제나 감사합니다.