입력 받은 String 타입 데이터는 순회가 가능한 값이다.
str
으로 중복 되는 값이 없이 만들 수 있는 모든 조합을 만들어서 최대 길이를 찾아보기로 했다.
우선 생각한 로직이 맞는 건지 확인하기 위해 많은 메소드나 가독성을 녹여내지 못하고 예상 출력에 성공했다.
입력 받은 str
을 for문으로 두번 순회하여 중복되지 않는 가능한 글자들의 조합을 만들고 배열에 담고,
배열에 담긴 요소들을 또 다시 for문으로 순회하여 0으로 초기화 해둔 text 변수에 순회 할때 마다 더 큰 값을 저장하여 순회가 끝난 후 그 값을 반환한다.
const getLengthOfStr = (str) => {
const arr = [];
let strCombination = "";
for (let i = 0; i < str.length; i++) {
strCombination = str[i];
for (let j = i + 1; j < str.length; j++) {
if (strCombination.includes(str[j])) {
break;
} else {
strCombination += str[j];
}
}
arr.push(strCombination);
}
let text = 0;
for(i = 0; i < arr.length; i++){
if( text < arr[i].length){
text = arr[i].length;
}
}
return text;
}
for문을 3번 순회한 첫번째 풀이중 마지막 for문을 배열 메소드로 대체해 리팩토링 해보았다.
배열 메소드 sort 를 사용하니 text
라는 변수로 배열에 담긴 요소들의 길이를 따로 기록 하면서 확인하지 않아도 최대 길이를 찾을 수 있었다.
배열의 sort 메소드는 원본배열의 정렬을 수정하고 기본적으로는 오름차순으로 정렬한다고 하지만 아래와 같이 정렬 순서를 정의하는 함수를 인수로 전달하여 최대 값을 반환 할 수 있었다.
const getLengthOfStr = (str) => {
const arr = [];
let strCombination = "";
for (let i = 0; i < str.length; i++) {
strCombination = str[i];
for (let j = i + 1; j < str.length; j++) {
if (strCombination.includes(str[j])) {
break;
} else {
strCombination += str[j];
}
}
arr.push(strCombination);
}
if(str.length>0){
return arr.sort((a, b) => b.length - a.length)[0].length;
} else return 0
}
자바스크립트의 Standard-Built-In 객체인 Math 는 Number 데이터 타입에 사용 할수 있는 많은 속성과 메소드를 제공한다.
첫번째 풀이와 두번째 풀이 보다 조금 더 직관적인 메소드 같아서 Math에서 제공하는 Math.max() 를 사용하여 리팩토링 해보았다.
코드가 한결 짧아지고 max라는 단어로 최대 값을 구한 다는 것을 알수 있어서 가독성도 좋아진거 같다.
const getLengthOfStr = (str) => {
const arr = [];
let strCombination = "";
for (let i = 0; i < str.length; i++) {
strCombination = str[i];
for (let j = i + 1; j < str.length; j++) {
if (strCombination.includes(str[j])) {
break;
} else {
strCombination += str[j];
}
}
arr.push(strCombination.length);
}
return Math.max(...arr, 0)
}
수요일 마다 문제가 어렵다고 들었는데, 진짜 어려웠다! 그치만 팀이 함께 문제를 분해하고 파헤쳐보니 다양한 아이디어가 나왔고 서로 설명하는 시간이 흥미진진했다. 의사코드를 작성하면서 어떤 방법으로 하면 왜 될거 같은지 그리고 또 왜 안 될거 같은지 각자 코드의 흐름을 예상해 볼수 있는 능력자 팀 멤버들 이였다. 현재 풀이는 위와 같이 마무리 되었지만, 짧고 가독성 좋은 풀이 방법을 위해 불 태우신 반응하는딸기팀🍓 고생하셨습니다!
오늘은 위워크에서 오프라인 세션을 하는 날이여서 5명 모두가 한팀으로 코드카타를 진행헀다.