Code Kata #3 Get Length Of String
💻Get Length Of String
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문
str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문
str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문
🔥갑작스러운 난이도 상승에 매우 당황했던 문제🔥
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문
str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문
str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문
처음으로 문제를 읽자마자 로직이 나오지 않았다.
어떻게 접근해야할지 조차 난감했다.
☕첫번째 풀이
처음엔 split()을 활용하여 배열로 쪼갤 생각을 했지만, 그래선 답이 나오지 않았다.
( 못찾은거겠지...)
그래서 생각을 달리했다.
const arr = []; // 중복되지 않는 문자열들의 `길이`가 담길 빈 배열 생성
let empty = ''; // 중복되지 않는 문자열이 담길 빈 문자열 생성
if (str.length !== 0) { // 인자로 빈 문자열이 들어올 경우를 대비
for (i in str) {
if (empty.includes(str[i])) { // 만약 중복된 문자열을 만났을 경우
empty = empty.slice(empty.indexOf(str[i]) + 1); // 문자열은 첫번째 중복값 (ex 'abcdefa' 중 첫'a') 다음 인덱스부터 끝까지 slice함 (ex 'abcdefa' -> 'bcdefa'
}
empty += str[i]; // 빈 문자열에 문자열을 한글자씩 채워넣기
arr.push(empty.length); // 그렇게 만든 문자열의 길이를 배열에 채워넣기
}
}
else {
return 0 // 만약 인자로 들어온 문자열이 빈 문자열일 경우 0을 반환
}
return Math.max(...arr); // 배열의 요소 중 가장 큰 값을 반환
}
생각도 복잡했고, 식도 복잡했다.
가장 어려웠던 것은 한 문자열 안에 중복으로 존재할 문자가
1개가 아닐수도 있다는 부분이었다.
절대중복되는 문자가 없는 문자열 이 필요했다.
for (i in str) {
if (empty.includes(str[i])) {
empty = empty.slice(empty.indexOf(str[i]) + 1);
}
empty += str[i];
arr.push(empty.length);
}
조건문의 식과 반복문의 식이 유연하게 연결되어야 했다.
조건이 맞아야 반복문의 식을 실행해야 했기 때문에
반복문 안에 바로 조건문을 넣었다.
💡어쩌다 보니 당초 예상과는 반대로 반복이 없는 문자열을 찾는 식 자체는 형변환 없이 문자열로만 해결할 수 있었다.💡
처음부터 위 식에서 리팩토링을 진행한다면, 바로 반복이 없는 문자열을 찾는 부분이라 생각했는데 막상 풀고보니 내 눈엔 리팩토링할 부분이 보이진 않는다..Author And Source
이 문제에 관하여(Code Kata #3 Get Length Of String), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kich555/Code-Kata-3-Get-Length-Of-String저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)