[TIL] 240518 (velog 썸네일 제작 / 프로그래머스 문자열 나누기)

·2024년 5월 18일

TIL

목록 보기
45/268
post-thumbnail

🥞 오늘 한 일

  • velog 썸네일 제작
    • TIL react 썸네일
    • WIL JavaScript + react 썸네일
  • 알고리즘 코드카타
    • 문자열 나누기

velog 썸네일 제작

다른 분들이 velog 썸네일과 함께 글을 올리시는 걸 보고, 확실히 이미지가 있으면 글의 완성도도 올라가면서도 가독성도 올라가는 효과가 있기에 나도 제작을 해보았다. 늘 디자인하는 그 느낌으로 figma를 이용해 심플하게 제작했다.

TIL_react

WIL_js_react

현재 공부중인 언어나 라이브러리 이미지와 함께 TIL, WIL 문구를 넣고, 오른쪽 아래에는 velog 주소를 작게 넣었다.
일단 이 템플릿으로 쭉 갈 것 같지만, 새로운 아이디어가 생각난다면 바꿀 의향도 있다.

🍽️ 문제 해결

알고리즘 코드카타

문자열 나누기

문제

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

  • 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
  • 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
  • s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
  • 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.

문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.

내 풀이

function solution(s) {
  let strArr = [...s];
  let count = 0;
  let newArr = [[], []];
  for (let i = 0; i < strArr.length; i++) {
    if (newArr[0].length === 0 || strArr[i] === newArr[0][0]) {
      newArr[0].push(strArr[i]);
    } else if (strArr[i] !== newArr[0][0]) {
      newArr[1].push(strArr[i]);
    }
    if (newArr[0].length === newArr[1].length || i === strArr.length - 1) {
      count++;
      newArr = [[], []];
    }
  }
  return count;
}

배열 내 배열을 만들어, 첫 문자와 같은 문자들은 배열의 첫 요소 배열에 넣어주고, 그 외 문자들은 두번째 요소 배열에 넣어준 다음 두 배열의 크기가 같다면 카운트를 올리고 배열을 초기화시켜 문제를 풀어냈다.

다른 사람의 풀이

function solution(s) {
    let answer = 0;
    let current;
    let count = 0;

    for(let i = 0; i < s.length; i++) {
        if(count === 0) {
            answer++;
            current = s[i]
            count = 1
        } else {
            if(current !== s[i]) count--;
            else count++;
        }
    }

    return answer;
}

조금 더 간단한 풀이.

🍳 내일 할 일

  • 스탠다드반 투두 리스트 타임어택 연습
profile
웹 프론트엔드 개발자

0개의 댓글