Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 문자열 인터폴레이션
- lastIndexOf()
- 코딩 어?
- 객체의 밸류값만 찾기
- 가상컴퓨터마법사
- Robo3T 글씨체 변경
- 5.3.8 Modifying Queries
- Robo3T 폰트 키우기
- 객체를 배열로
- search()
- sql 문자열 패턴 검색
- js 문자열을 문자배열로
- 스프링 데이타 JPA
- findIndex()
- Robo3T 폰트변경
- 우분투 시간 변경
- 객체의키값만 찾기
- Robo3T 글씨키우기
- sql like연산자
- indexOf()
- 레디스 확인
- 깃 토큰 만료
- ...점점점문법
- 시퀄 문법
- 리엑트블로거
- 프론트엔드 스쿨
- @Moditying @Query
- ${변수}
- 배열을 객체로
- ubuntu타임존
Archives
- Today
- Total
코딩기록
string) 중복된 문자 제거 / 공백포함 문자열 중복 제거 set, filter, reduce, for, for...of 본문
프론트/JS)코딩테스트
string) 중복된 문자 제거 / 공백포함 문자열 중복 제거 set, filter, reduce, for, for...of
뽀짝코딩 2024. 9. 23. 23:19728x90
문제 설명
문자열 str이 매개변수로 주어집니다. str에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ str ≤ 110
- str은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
입출력 예
str result
"people" | "peol" |
"We are the world" | "We arthwold" |
입출력 예 설명
입출력 예 #1
- "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.
입출력 예 #2
- "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.
/**
* @param {string} str
* @return {string}
*/
const solution = str => {
// do something
};
console.log(solution('people')); // 'peol'
console.log(solution('We are the world')); // 'We arthwold'
풀이
총 5가지 방법 set, filter, reduce, for, for...of
1번 풀이 set
set은 배열에서 중복된 요소를 제거한다.
const solution1 = str => [...new Set(str)].join('');
console.log(solution1);
console.log(solution1('people')); // 'peol'
console.log(solution1('We are the world')); // 'We arthwold'
2번 풀이 filter
filter는 참인것만 반환하는데, i인덱스가 문자열에서 현재 문자가 처음으로 등장하는 것만 반환한다.
'people'에서 인덱스[3] 'p'는 인덱스[0]과 같지 않으므로 걸러진 것.
str.indexOf(str[i]) // str[i]- 인덱스
// 2번 풀이 - filter
const solution2 = str => {
return [...str].filter((c, i) => {
return str.indexOf(c) === i
}).join('');
// console.log(str.indexOf(c)); // c-문자열 요소
//문자열에서 현재 문자가 처음으로 등장하는 위치(인덱스)를 반환
// console.log(str.indexOf(str[i])); // str[i]-인덱스
};
console.log(solution2('people')); // 'peol'
console.log(solution2('We are the world')); // 'We arthwold'
3번 풀이 reduce
reduce는 꼭 초기값 설정을 하는것이 속 편하다. 자꾸 이것 때문에 오류가 난다.
- 초기 값을 ' ' 빈문자열로 설정한 후,
- acc라는 누적값에 cur이라는 현재값이 포함되어 있지 않은것만 참이되어 if문으로 진입.
- acc에 문자를 하나씩 더한다.
// 3번 풀이 - reduce // reduce사용시 초기값 설정 잊지 말것!!!
const solution3 = str => {
return [...str].reduce((acc, cur) => {
if (!acc.includes(cur)) {
acc += cur;
}
return acc;
}, '');
};
console.log(solution3('people')); // 'peol'
console.log(solution3('We are the world')); // 'We arthwold'
4번 풀이 for문, 문자와 인덱스가 동일한지 확인
- for문으로 배열의 길이만큼 반복적으로 요소를 돌면서,
- if문의 조건이 참일 경우 해당 인덱스에 속하는 문자가,
- res라는 빈배열에 하나씩 더해진다.
'p'라는 값이 같아도 인덱스가 [0]과 [3]으로 다르기 때문에 중복이 걸러진다.
// 4번 풀이 - for
const solution4 = str => {
let res = '';
for (let i = 0; i < str.length; i++) {
// indexOf는 인수로 전달받은 문자열을 검색하여 첫번째 인덱스를 반환한다. 검색에 실패하면 -1을 반환한다.
if (str.indexOf(str[i]) === i) res += str[i];
}
return res;
}
console.log(solution4('people')); // 'peol'
console.log(solution4('We are the world')); // 'We arthwold'
5번 풀이 for..of문, 문자와 인덱스가 동일한지 확인
- for..of를 이용해 res문자열에 배열 요소인c가 없으면
- res라는 빈배열에 배열 요소인 문자가 하나씩 더해진다.
1번째
res: ' ' 빈문자열 / 요소c 'p' / 저장 res: 'p'
2번째
res: 'p' / 요소c 'e' / 저장 res: 'pe'
3번째
res: 'pe' / 요소c 'o' / 저장 res: 'peo'
4번째
res: 'peo' / 요소c 'p' ❌중복요소라 저장 안됨❌ / 저장 res: 'peo'
5번째
res: 'peo' / 요소c 'l' / 저장 res: 'peol'
6번째
res: 'peol' / 요소c 'e' ❌중복요소라 저장 안됨❌ / 저장 res: 'peol'
결과 'peol'
// 5번 풀이 - for...of
const solution5 = str => {
let res = '';
for (const c of str) {
if (!res.includes(c)) res += c;
}
return res;
}
console.log(solution5('people')); // 'peol'
console.log(solution5('We are the world')); // 'We arthwold'
참고
나, 쳇지피티
반응형
'프론트 > JS)코딩테스트' 카테고리의 다른 글
string) sum matrix / 2차원배열을 이중포문으로 변경후 모든 요소 총합 - map, reduce, forEach, for (0) | 2024.09.23 |
---|---|
string) 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 / match + 정규표현식, lastIndexOf(), slice (0) | 2024.09.23 |
string) 7의 개수 / 배열에 특정 문자 개수 세기(카운트), for...of문안에서 문자열만들기-for (const c of nums.join('')) (0) | 2024.09.23 |
JS) 배열에 있는 요소를 문자열 배열로 (0) | 2024.09.19 |
배열 풀기, 배열 벗기기 join(' ,'); / .toString(); (0) | 2024.09.05 |
Comments