replit code kata 3일차

7005 단어 codekatacodekata

문제

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

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

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

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

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


나의 풀이

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

풀이

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

좋은 웹페이지 즐겨찾기