•programmers-한 번만 등장한 문자
한 번만 등장한 문자
문제 설명
문자열
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 합니다.
•solution.js
function solution(s) { return [...s].filter(c => s.split(c).length === 2).sort().join(''); } /* 테스트 1 입력값 〉 "abcabcadc" 기댓값 〉 "d" 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 "abdc" 기댓값 〉 "abcd" 실행 결과 〉 테스트를 통과하였습니다. 테스트 3 입력값 〉 "hello" 기댓값 〉 "eho" 실행 결과 〉 테스트를 통과하였습니다. */
동작 원리
처음이나 마지막은 +1되서 나
•other-solution.js
function solution(s) { return [...s].filter(c => s.match(new RegExp(c, 'g')).length === 1).sort().join(''); } // 정규표현식 s.match()안에 바로 문자열을 넣을 수 없기 떄문에 s.match(new RegExp(c, 'g')).length === 1) 이런식으로 작성
작동 원리
function solution(s) { let res = []; for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c); return res.sort().join(''); }
let res = [];
: 빈 배열res
를 초기화합니다. 이 배열은 한 번만 나타나는 문자들을 저장할 용도로 사용됩니다.
for (let c of s)
: 문자열s
를 순회합니다. 각각의 문자를c
로 가져옵니다.
if (s.indexOf(c) === s.lastIndexOf(c))
: 현재 문자c
가 문자열 내에서 처음 나타나는 위치(indexOf
)와 마지막으로 나타나는 위치(lastIndexOf
)가 동일한지 확인합니다. 만약 동일하다면, 해당 문자는 문자열 내에서 한 번만 나타나는 문자입니다.
res.push(c)
: 한 번만 나타나는 문자라면, 결과 배열res
에 해당 문자를 추가합니다.
return res.sort().join('')
: 결과 배열을 정렬하고, 정렬된 배열을 문자열로 변환하여 반환합니다. 따라서 함수는 주어진 문자열에서 한 번만 나타나는 문자들을 알파벳 순으로 정렬된 문자열로 반환합니다.