📕 문제 설명
문자열 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 answer = [];
let count = new Array(s.length).fill(0);
for(let i = 0; i < count.length; i++) {
count[s.indexOf(s[i])]++;
}
count.forEach((cnt, i) => cnt === 1 && answer.push(s[i]));
return answer.sort().join("");
}
복잡한 듯 아닌 듯 😜
1. 중복이 아닌 배열을 담을 빈 배열 answer 변수와 문자열 개수를 세기 위한 0으로 채워진 배열 count 변수를 생성한다.
let answer = [];
let count = new Array(s.length).fill(0);
2. indexOf()
를 활용하여 문자열 s에 있는 각 요소의 인덱스 위치를 구해 count 배열에 있는 동일한 인덱스의 값을 +1 씩 증가시켜 각각의 개수를 구한다
for(let i = 0; i < count.length; i++) {
count[s.indexOf(s[i])]++;
}
3. 개수가 담긴 count 배열을 forEach
로 순회하며 값이 1인 (한 개인) 요소만 answer 배열에 삽입한다.
count.forEach((cnt, i) => cnt === 1 && answer.push(s[i]));
4. 배열을 sort()
로 사전 순으로 정렬하고, join("")
으로 문자열로 변환하여 반환한다.
return answer.sort().join("");
⭐ 참고할 다른 답변
function solution(s) {
let res = [];
for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
return res.sort().join('');
}
s.indexOf(c) 와 s.lastIndexOf(c)가 같으면 하나인 것...!
lastIndexOf()를 사용할 생각은 떠올리지 못했다 🤦♀️
하나 더 배웠다!
728x90
반응형
'프로그래머스 > Lv. 0 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스] Lv.0 대문자와 소문자 / JS (0) | 2023.08.11 |
---|---|
[프로그래머스] Lv.0 인덱스 바꾸기 / JS (0) | 2023.08.11 |
[프로그래머스] Lv.0 영어가 싫어요 / JS (0) | 2023.08.11 |
[프로그래머스] Lv.0 문자열 계산하기 / JS (0) | 2023.08.10 |
[프로그래머스] Lv.0 숫자 찾기 / JS (0) | 2023.08.10 |