RISK IT

[code kata] week 1 - day 3 본문

IT/Algorithm & CodeKata

[code kata] week 1 - day 3

nomoremystery 2023. 1. 18. 22:52
반응형

문제

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

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

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

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

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


모범 풀이

const getLengthOfStr = (str) => {
  let topLength = 0;
  let arr = [];

  for (i = 0; i < str.length; i++) {
    if (arr.indexOf(str[i]) == -1) {
      arr.push(str[i]);
    } else {
      arr = arr.slice(arr.indexOf(str[i]) + 1);
      arr.push(str[i]);
    }

    if (topLength < arr.length) {
      topLength = arr.length;
    }
  }

  return topLength;
};

이 코드의 핵심은 str의 길이만큼 for문을 돌려서 중복되지 않은 알파벳은 추가하고 중복되는 알파벳은 이미 추가된 것을 먼저 지우고 나중 것을 추가하는 아이디어를 낼 수 있는가이다.

이번 문제에서는 문제를 제대로 푸는 것도 중요하지만 그 전에 문제를 제대로 이해하는 것이 우선시 되어야 한다는 점을 다시 한 번 상기시켜주었다.

실패한 나의 풀이

const getLengthOfStr = (str) => {
  const arr = str.split('');

  let star = [];
  for (i = 1; i <= arr.length; i++) {
    star.push(0);
  }

  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] === arr[i + 1]) {
      star[i + 1] = 1;
    }
  }
  const a = star.join('');
  const b = a.split('1');
  const c = [];
  for (let i = 0; i < b.length; i++) {
    c.push(b[i].length);
  }
  const d = c.sort();
  const e = d[d.length - 1];
  return e;
};

내 풀이의 문제점

  1. 변수를 선언할 때 이름을 쉽게 지어줘야 하는데, 변수를 너무 많이 생성하다 보니까 변수 이름 적절하게 짓는것도 쉽지 않아서 a, b, c, d, e 이런 식으로 변수를 지었다. 물론 조금이라도 더 의미 있게 지으려면 지을 수는 있지만 우선은 날 것 그대로의 코드를 가지고 왔다.
  2. 문제를 제대로 이해하지 못해서 abcabcabc와 같은 인풋에 대한 결과값이 출력되지 않았다. 힘들게 작성했지만, 문제를 제대로 이해하지 못한 내 탓이다.
  3. .indexOf 메소드를 안쓰고 해보려고 했지만, 실패했다. 좋은 메소드가 있으면 적극 활용할 줄도 알아야 한다.
  4. 기본적으로 문제도 해결하지 못하는 풀이기 때문에 갈 길이 먼 풀이다.

중복되지 않은 알파벳이라는 표현이 모호해서 문제 풀이 방향을 잘못 잡았던 점은 좀 아쉬웠다. 내가 이해력이 부족한 탓이지만..!

반응형

'IT > Algorithm & CodeKata' 카테고리의 다른 글

[code kata] week 1 - day 5  (0) 2023.01.24
[code kata] week 1 - day 4  (0) 2023.01.24
[code kata] week 1 - day 2  (0) 2023.01.17
[code kata] week1 - day1  (0) 2023.01.17