
<제출 답안>
function solution(s) {
let baseArr = [];
let answer = [];
[...s].forEach((x, i) => {
if (i !== 0 && baseArr[baseArr.length - 1] !== x) {
answer.push(baseArr[0]);
answer.push(baseArr.length);
baseArr = [];
}
baseArr.push(x);
});
if (baseArr.length !== 0) {
answer.push(baseArr[0]);
answer.push(baseArr.length);
}
return answer.join("").replaceAll("1", "");
}
let str = "KKHSSSSSSSE";
console.log(solution(str));

<정답 코드>
내 코드의 문제는 역시 반복문을 돌면서 1을 제거하지 못하는 것.
문자와 카운트만을 저장하는게 나처럼 길이를 저장하는 것보다 훨씬 직관적이고 정확도가 올라간다.
(난 이렇게 생각 안하고 싶었을까?)
<process>
처음은 1로 count 초기화해서 0부터 다음 숫자와 같은지 현재인덱스에서 다음 인덱스 문자를 확인해서
문자가 같으면 count ++
문자가 다르면 그대로 추가 및 count의 현재값을 문자열로 변환후 answer에 추가.
function solution(s){
let answer="";
let cnt=1;
s=s+" ";
for(let i=0; i<s.length-1; i++){
if(s[i]===s[i+1]) cnt++;
else{
answer+=s[i];
if(cnt>1) answer+=String(cnt);
cnt=1;
}
}
return answer;
}
let str="KKHSSSSSSSE";
console.log(solution(str));
'🗃️javascript > 코테 프레임 문제' 카테고리의 다른 글
4-2 뒤집은 소수(x) [filter(Boolean): fasly 값제외, 남은 값만 새 배열로 생성] (0) | 2024.04.18 |
---|---|
4-1 자릿수의 합(x) [for문의 안쓰기 위해 발버둥 치는 중] (0) | 2024.04.17 |
3-4 가장 짧은 문자거리(x)[return문 작성 표시를 안해서 생긴 에러 고찰] (0) | 2024.04.16 |
3-3 숫자만 추출(x)[splice 활용: 원본의 변화는 임시 변수에 담아 재할당] (0) | 2024.04.16 |
3-2 유효한 팰린드롬(x) [특수문자만 제거해서 대소문자 남기기] (0) | 2024.04.16 |