한 번만 등장한 문자
문제 설명
문자열 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) {
let set = new Set(s)
let sArr = Array.from(set)
let idx = new Array(sArr.length)
idx.fill(0)
for(let i = 0; i < sArr.length; i++){
for(let str of s){
if(sArr[i] === str){
idx[i] += 1;
}
}
}
let answer = []
for(let i = 0; i < idx.length; i++){
if(idx[i] === 1){
answer.push(sArr[i])
}
}
answer = answer.sort()
answer = answer.join('')
return answer
}
풀이 설명
- 기본적인 아이디어는 문자열
s를 구성하는 문자들의 빈도를 계산하여 빈도수가 1인 문자만 따로 저장하는 것이다.
- 문자들의 빈도를 계산하기 위해 입력으로 들어온 문자열
s의 중복을 제거해 배열로 저장한 sArr
- 문자들의 빈도를 저장하기 위해
sArr만큼의 길이를 가지고, 모든 요소를 0으로 초기화한 배열 idx
- for 문과 for of 문을 통해 문자열
s안의 문자들을 차례대로 중복을 제거한 배열 sArr의 요소들과 비교하여 그 값이 일치할 때마다 배열 sArr의 해당 index에 해당하는 배열 idx안의 요소를 1씩 더해준다.
- 그 이후 다시 for 문을 통해 문자들의 빈도수가 저장된 배열
idx의 요소가 1인 경우 배열 idx와 같은 인덱스의 배열 sArr의 요소를 정답을 저장하기 위한 배열 answer에 저장한다.
- 배열
answer를 sort()메서드를 통해 사전 순으로 정렬한 뒤 join()메서드를 통해 배열을 문자열로 변환하고, 그 값을 반환한다.
indexOf() 와 lastIndexOf() 메서드