문제
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해 보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
제한사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
입출력 예
s | result |
"abcabcadc" | "d" |
"abdc" | "abdc" |
"hello" | "eho" |
입출력 예 #1
"abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
입출력 예 #2
"abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
입출력 예 #3
"hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
내가 작성한 답안
function solution(s) {
// s를 쪼개 배열로 만든다.
let arr = s.split('');
// s에서 중복되는 글자를 모두 제거한 값들을 배열에 담고 오름차순 정렬한다.
const uniqueArr = [...new Set(arr)].sort();
// uniqueArr의 length만큼의 길이를 가지는 배열을 만들고 요소를 0으로 채운다.
let countArr = Array.from(Array(uniqueArr.length)).fill(0);
// arr 요소의 문자와 uniqueArr 요소의 문자가 일치한다면 해당 uniqueArr의 idx위치에 +1한다.
for(let i of arr) {
for(let j = 0; j <= uniqueArr.length; j++) {
if(i === uniqueArr[j]) countArr[j]++;
}
}
// countArr가 1인(한 번만 등장하는 문자)만 변수에 합쳐 return한다.
let str = '';
countArr.forEach((e, idx) => {
if(e === 1) str += uniqueArr[idx];
})
return str;
}
다른 사람들이 작성한 답안
function solution(s) {
let res = [];
for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
return res.sort().join('');
}
정말 박수가 나오는 답안이다. 앞에서부터 추적하는 indexOf와 뒤에서부터 추적하는 lastIndexOf값이 동일하다면 해당 추적값은 하나만 있다는 의미이므로 바로 해당 값을 담았다. 또한 문자열 그 자체를 for...of로 바로 돌렸다!
String.prototype.lastIndexOf(searchValue[, fromIndex])
주어진 값과 일치하는 부분을 fromIndex로부터 역순으로 탐색하여, 최초로 마주치는 인덱스를 반환한다. 일치하는 부분을 찾을 수 없으면 -1을 반환한다.
- searchValue: 찾고자 하는 문자 또는 문자열로, 대소문자를 구분한다.
- fromIndex: 검색을 시작할 index
- 반환값
- str에서 searchValue가 '마지막'으로 검색되는 'index'값을 반환한다.
- 만약 searchValue가 존재하지 않는다면 '-1'을 반환한다.
[참고 자료]
https://school.programmers.co.kr/learn/courses/30/lessons/120896
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf
'Front-End > Algorithm' 카테고리의 다른 글
[프로그래머스 / JavaScript] Lv.0 배열의 원소만큼 추가하기 (0) | 2023.07.24 |
---|---|
[프로그래머스 / JavaScript] Lv.1 숫자 문자열과 영단어 (0) | 2023.04.20 |
[프로그래머스 / JavaScript] Lv.1 k의 개수 (0) | 2023.04.13 |
[프로그래머스 / JavaScript] Lv.1 신규 아이디 추천 (ft. 테스트 케이스) (0) | 2023.04.12 |
[프로그래머스 / JavaScript] Lv.1 로또의 최고 순위와 최저 순위 (0) | 2023.04.11 |