저장을 습관화
프로그래머스 LV.0 한 번만 등장한 문자 본문
프로그래머스 LV.0 한 번만 등장한 문자
https://school.programmers.co.kr/learn/courses/30/lessons/120896
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
한 번만 등장한 문자
2. 문제 설명
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
3. 제한 사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
4. 예시
s | result |
"abcabcadc" | "d" |
"abdc" | "abcd" |
"hello" | "eco" |
5. 기본 제공 코드
function solution(s) {
var answer = '';
return answer;
}
6. 제출한 내 답
const solution = (s) => {
let listToRemove = [];
let arr = [...s].sort();
for (i = 0; i < arr.length; i++) {
if (arr.slice(i + 1).includes(arr[i])) {
listToRemove.push(arr[i]);
}
}
return arr.filter((v) => (listToRemove.includes(v) ? "" : v)).join("");
};
6-2. VSC에 작성한 내용
const solution = (s) => {
let listToRemove = [];
let arr = [...s].sort();
// 중복되는 글자가 있는지 검사
for (i = 0; i < arr.length; i++) {
// console.log(arr.slice(i + 1));
if (arr.slice(i + 1).includes(arr[i])) {
// console.log(arr[i]);
listToRemove.push(arr[i]);
}
}
return arr.filter((v) => (listToRemove.includes(v) ? "" : v)).join("");
};
// 테스트
console.log(solution("abcabcadc")); // aaabbcccd
console.log(solution("abdc"));
console.log(solution("hello"));
console.log(solution("aa")); // 한번만 등장하는 문자가 없을 경우 빈 문자열
7. 특이사항
좀 많이 돌아왔다..
예전에 봤었던 중복된 글자를 제거하는 메소드 set을 써보려고도 했는데
이 경우 중복되더라도 맨 앞에 있던 글자는 남겨지게 된다.
중복되는 글자를 모두 제거하기 위해 문자열에서
글자 t와 t를 제외한 나머지 문자열에 또 다른 t가 있는지 확인하고,
있다면 listToRemove 살생부에 넣었다.
이후 filter를 통해 살생부에 존재하지 않는 글자만을 반환하도록 하였다
8. 다른 사람이 작성한 답
8-1. 가장 많이 쓰인 풀이법, indexOf와 lastIndexOf
function solution(s) {
let res = [];
for (let c of s) if (s.indexOf(c) === s.lastIndexOf(c)) res.push(c);
return res.sort().join('');
}
요소 c의 첫번째 위치와 마지막 위치가 일치할 경우
이는 배열 안에 요소 c가 하나만 존재한다는 의미이다..
정말 기발하다
indexOf와 lastIndexOf도 알고 있었지만 이렇게 사용하는 방법은 생각하지 못했다..
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.1 수박수박수박수박수박수? (0) | 2023.09.26 |
---|---|
프로그래머스 LV.0 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.09.26 |
프로그래머스 LV.0 간단한 논리 연산 (0) | 2023.09.26 |
프로그래머스 LV.0 세 개의 구분자 (0) | 2023.09.26 |
프로그래머스 LV.0 문자열이 몇 번 등장하는지 세기 (0) | 2023.09.26 |