주어진 문자열 중 하나라도 겹치는 문자가 있다면 겹치는 문자는 ')' 로,
겹치지 않는 문자는 '('로 표현
function duplicateEncode(word){
const string = word.split('');
let arr = []
string.forEach(w => {
let pattern = w;
let regexAllCase = new RegExp(w, "gi");
const result = word.match(regexAllCase).length;
if (result > 1){
pattern = ')'
arr.push(pattern);
}else if(result == 1){
pattern = '('
arr.push(pattern);
}
});
const atr = arr.join('')
console.log(atr)
}
duplicateEncode('Success')
그런데 이렇게 푸니까 특수문자가 들어갈 경우 에러가 났다..
정규표현식 안에 (,),@ 이런 특수문자가 들어가니 정규표현식을 사용하지 못 했다 ㅠㅠ
그래서 다시 시도하게 된 두번째 풀이..
이번엔 정규식 표현이 아닌 같은 문자열 개수로 파악하기..
split(문자).length -1 해주면 반복되는 문자열의 length 가 파악된다.
하지만 이번에도 실패... ㅡㅡ!!!!
string[0] 는 이전과 비교할 대상이 없으니 당연히 "length == 1"을 반환한다.
그래서 반복되는 문자가 첫 번째 자리에 있을 경우를 찾지 못 하여 실패
function duplicateEncode(word){
const string = word.split('');
let arr = []
string.forEach(w => {
let pattern = w;
let test = word.split(w).length -1;
console.log(test)
if (test > 1){
pattern = ')'
arr.push(pattern);
}else if(test == 1){
pattern = '('
arr.push(pattern);
}
});
const atr = arr.join('')
}
duplicateEncode('Success')
드디어 풀었다!!!!!!
indexOf, filter, 정규식 사용한 match, length 등등..
이런 저런 방법 다 쓰다가 드디어 해결!!
function duplicateEncode(word){
//모든 문자 소문자로
const lowerCase = word.toLowerCase()
//문자 배열화
const stringArr = lowerCase.split('');
// 결과 담길 빈 배열 선언
let resultArr = []
stringArr.filter((item) => {
let text = item;
//문자배열에서 문자 하나씩 돌면서,
//현재 문자 앞에서 찾은 index 위치와 현재 문자 뒤에서 찾은 index를 비교하여
//같다면 같은 문자 0, 다르면 같은 문자 >= 1
stringArr.indexOf(item) !== stringArr.lastIndexOf(item) ?
text = ')' : text='('
resultArr.push(text);
});
return resultArr.join('')
}
너모 뿌듯하다 ^___^
codewars 문제가 제일 재밌는 듯 👍👍👍