[프로그래머스] 한 번만 등장한 문자
카테고리 : 컴퓨터 공학
태그: programmers · Code Refactoring · 참고 할 만한 다른 사람의 코드 · 코딩 기초 트레이닝 · 프로그래머스 · 코딩테스트 연습 · JavaScript · 한 번만 등장한 문자 · js 한 번만 등장한 문자
태그: programmers · Code Refactoring · 참고 할 만한 다른 사람의 코드 · 코딩 기초 트레이닝 · 프로그래머스 · 코딩테스트 연습 · JavaScript · 한 번만 등장한 문자 · js 한 번만 등장한 문자
문제 설명
문자열 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) {
var answer = [];
[...s].forEach((item) => {
if (s.indexOf(item) == s.lastIndexOf(item)) {
answer.push(item);
}
});
return answer.sort().join("");
}
나의 두번째 풀이(Code Refactoring)
function solution(s) {
let result = [];
let arr = s.split("").sort();
let counter = {};
for (let item of arr) {
counter[item] = (counter[item] || 0) + 1;
}
for (let key in counter) {
if (counter[key] === 1) {
result.push(key);
}
}
return result.join("");
}
// 1. 문자열을 배열 요소로 만들고 빈도를 체크하는 빈 obj 생성
// 2. counter에 빈도수가 1인 값을 찾아 result에 담는다
// 3. 시간 복잡도를 O(n)으로 만들었다
참고 할 만한 다른 사람의 코드
function solution(s) {
let res = [];
for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
return res.sort().join("");
}
// 1. 시간 복잡도가 O(N^2)이지만 간결한 방법으로 풀 수 있다