Codekata | 03

ka0son·2022년 5월 29일
0

Codekata

목록 보기
3/3
post-thumbnail

문제

String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.

str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)

예를 들어,
str = "abcabcabc"
return은 3
=> 'abc' 가 제일 길기 때문

str = "aaaaa"
return은 1
=> 'a' 가 제일 길기 때문

str = "sttrg"
return은 3
=> 'trg' 가 제일 길기 때문


💡 Answer


function getLengthOfStr(s) {
    let strArr = [];
    let prevStrArr = [];
    for (let i = 0; i < s.length; i++) {
        let ss = s.slice(i, i+1);
        for (let j = 0; j < strArr.length; j++) {
            if (ss === strArr[j]) {
                if (prevStrArr.length < strArr.length) {
                    prevStrArr = strArr.slice();
                }
                strArr = strArr.splice(j+1, strArr.length);
                break;
            }
        }
        strArr.push(ss);
    }
    
    return Math.max(strArr.length, prevStrArr.length);
}

체크하는 문자열이 저장 될 배열(strArr)와 중복된 문자열을 찾았을 경우 그 전까지의 문자열을 기록할 배열 (preStrArr)를 생성한다. 그 다음 주어진 문자열의 문자를 하나씩 돌면서 체크를 해준뒤 중복되지 않은 문자열의 경우에는 strArr에 저장해주도록 한다.
중복되는 문자를 찾을 경우 그 문자 전까지를 preStrArr에 저장한 후에 현재까지 체크된 문자열인 strArr에서 첫번째 문자부터 중복문자의 앞쪽 문자까지를 잘라준다. 이 후 다음 문자부터 2~3번 반복해준다. 그 다움에 다시 중복되는 문자를 발견했을 경우에는 그때까지의 문자열의 길이와 그전에 발견된 중복되지 않은 문자열의 길이를 비교한다. 비교했을 때 서로 발견된 문자열이 더 길경우 preStrArr에 담겨있는 배열의 길이를 비교한다. 비교햇을 때 새로 발견된 문자열이 더 길 경우 preStrArr를 교체하고 그렇지 않으면 교체하지 않는다. 바로 전의 프로세스를 반복했을 경우, preStrArr에는 찾아낸 중복되지 않은 문자열 중 가장 긴 것이 저장되어 있을 것이고, strArr에는 나머지 문자들이 담겨있을 것이다. 끝으로 그 둘을 비교해서 더 긴것을 리턴한다.

0개의 댓글