[Code Kata] JavaScript #3

  1. 문제

    * String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
    ex) str = "sttrg" -> return 3(trg), str = "abcabcabc" -> return 은 3(abc)

  1. 문제 해결 방법 구상

    1) 인자로 받은 문자의 맨 앞글자는 빈 문자열에 할당 후 그 다음 글자부터는 첫 글자가 할당한 문자열에 포함되어있는지 확인하여 포함 되어있으면, 반복문 종료, 포함되어 있지 않다면 문자열에 해당 문자를 합쳐서 그렇게 합친 문자열을 빈 배열에 할당. 배열의 모든 할당 값은 인자문자열 내에서 중복문자가 없는 문자열 조합들로 채워지게 하여 배열의 모든 값 중에서 가장 길이가 긴 값을 리턴 하는식으로 구상 하였습니다.

    2) 앞에서 한 문자씩 마지막 문자까지, 각 문자는 나머지 뒤의 문자들과 비교를 하기 위해 이중 for 문을 사용 하였습니다.

    3) 인자의 값이 없을 때는 제대로 동작 하지 않아, 예외 처리를 통해 0을 return 하도록 하였습니다.

    4) 중복 문자가 없어서 마지막 문자까지 탐색 했을 때 (i === str.length), 중복 문자가 나왔을 때 (break) 종료 하기위한 설정을 하였습니다.

    5) 이렇게 뽑아낸 문자열이 담긴 배열에서 각 값들 중에서 가장 긴 문자열의 길이를 return하도록 하였습니다.

  2. 코드 작성

function change(str) {
  let arr = [];							// 인자에서 중복되지 않은 문자들을 뽑은 값을 저장할 배열 선언

  for (let t = 0; t < str.length + 1; t++) {
    let result = "";						// 문자 중복제거용 변수 선언

    for (let i = t; i < str.length + 1; i++) {
      if (str == "") {						// 인자의 문자열이 "" 일때 예외처리
        return 0;
      } else if (result == "") {				
        result = str.slice(i, i + 1);				// result 가 빈값일 때 현재 탐색중인 문자 무조건 할당
      } else if (i === str.length) {				 
        arr.push(result);					// 인자의 마지막 문자 까지 탐색했을 때 현재 result 에 있는 문자열을 배열에 추가
      } else if (!result.includes(str.slice(i, i + 1))) {
        result += str.slice(i, i + 1);				// 현재 result 에 현재 탐색중인 글자가 포함되어있지 않으면 result에 해당 문자 추가
      } else {
        arr.push(result); 					// 인자로 받은 문자열의 끝까지 탐색하지 않았지만, result에 현재 탐색중인 문자가 포함 된 경우 그때의 result 값을 배열에 추가
        break;
      }
    }
  }
  let max = arr[0].length;	
  for (i = 1; i < arr.length; i++) {
    if (arr[i].length > max) {					// 배열의 각 항의 길이를 비교하여 각장 긴 배열의 길이를 max로 할당
    max = arr[i].length;
  }
  return max;
}
}

  1. 작성 후 알게 된 점

    1) 이중 for 문을 사용하여 반복시킬때, 바깥 for 문의 변수를 안쪽 for 문의 변수의 초기값으로 할당하여 돌리는 것도 가능하다는 것을 확인하였습니다.

좋은 웹페이지 즐겨찾기