TIL. 29 CodeKata 3~5일차

🎈 CodeKata


3일차 문제

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

    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, 그리고 중복된 문자열을 찾았을 때 저장할 배열 prevStrArr을 선언한다.

// 하나씩 체크하며 strArr에 저장하고 중복되는 문자를 찾았을 경우, 비교해야 하기 때문에 중복문자 바로 전까지의 문자를 prevStrArr에 저장한다.

// strArr에서는 처음에는 prevStrArr과 동일하기 때문에 다음 체크를 시작하기 위해 중복문자의 앞쪽 문자까지를 잘라낸다.

// 이후 또 중복문자가 발견되면, 두 배열을 비교해 기존 prevStrArr이 더 길 경우 그대로 유지하고, strArr이 더 길 경우 prevStrArr과 교체하고 다시 잘라낸다.

// 이 순서를 반복하면 결국엔 더 긴 문자열은 prevStrArr에 저장된다.

너무 어렵게 느껴졌던 문제였으며 구글의 도움을 받아 풀이를 공부하는 방식을 선택했다..


4일차 문제

숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.

  let numArr = String(num).split('').join('')
  // console.log(numArr)

  let reverse = String(num).split('').reverse().join('')
  // console.log(reverse)

  return  numArr === reverse ? true : false

// 뒤집은 모양을 reverse() 함수를 통해 알아내려고 한다.
// 숫자형에서는 사용할 수 없는 함수이며, 변수 numArr에서 split()과 join()를 활용해 배열로 만든 후 다시 문자열로 반환했다.
// 변수 reverse를 선언하며 배열로 만든 후 뒤집어 문자열로 만들었다. 그 후 3항 연산자를 사용해 numArr과 reverse가 같으면 true, 다르면 false를 반환하도록 했다.


5일차 문제

strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.

const getPrefix = strs => {
  if (strs.length === 0) return ''
  let comp = strs[0]; 

  for (i = 1; i < strs.length; i++) {
    while (strs[i].indexOf(comp) !== 0) {
      comp = comp.substring(0, comp.length - 1); 
    }
    }
  return comp;
}

// 먼저 기준이 될 요소 하나를 변수 comp로 선언한다.
// for문과 while문을 활용했으며, 0번 요소가 기준이기 때문에 i=1로 시작한다.
// 먼저 0번 요소가 i번째 요소에 포함되어 있는지 파악하고, 만약 포함되어 있지 않을 경우 0번 요소의 맨 뒤 문자를 삭제하고 다시 체크한다.
// 이렇게 반복하면 결국 하나도 일치하지 않거나, 일치하는 문자가 나오며 나올 경우는 comp를 return한다.


코드카타를 풀며 어떤 류의 문제가 나에게 풀만하고, 어떤 문제가 어려운지 파악할 수 있어 좋게 느껴진다. 시간을 들여도 못푸는 경우 검색을 통해 알아내는 경우도 있고, 풀이를 봐도 힘든 경우가 있다. 배워가는 과정이라 생각하고 있지만, 생각 같아서는 풀 때까지 잡고 있고 싶지만 아직 할 것이 많아 효율적인 시간 분배를 위해 풀이 자체를 연구해보고 있다.

문제를 풀 때 중요한건 어떤식으로 접근하고, 어떤 방법으로 풀어나갈지에 대한 중요성을 깨달았고. 반복을 통해 빠르고 정확하게 문제들을 풀 수 있도록 해야겠다.

좋은 웹페이지 즐겨찾기