본문 바로가기
코테연습

170. 문자열 나누기 Javascript

by hxunz 2023. 1. 3.

https://school.programmers.co.kr/learn/courses/30/lessons/140108

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
    - 문자열 s가 매개변수로 주어질 때, 문자열들로 분해하고, 분해한 문자열의 개수를 return하라
  • 주어진 자료는 무엇인가? 
    - 문자열 분해 규칙 :
    먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
    이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
    s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
    만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
  • 조건은 무엇인가?
    - 1 ≤ s의 길이 ≤ 10,000
    - s는 영어 소문자로만 이루어져 있습니다.

2. 계획

  • 첫번째 글자 x를 구한다.
  • 주어진 문자를 순회하면서 x의 개수를 센다.
  • x가 아닌 문자열의 개수를 센다.
  • 두개의 개수가 같아지면 멈춘다.
  • 멈춘 지점까지 자른다.
  • 이를 반복한다.
  • 남은부분이 없다면 종료한다.
  • 더 읽을 글자가 없으면 지금까지 읽은 문자열을 분리하고 종료한다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (s) => {
  let sameCnt = 0;
  let countX = 0;
  let countNotX = 0;
  let firstWord = '';

  for (let word of s) {
    if (!firstWord) {
      firstWord = word;
    }

    if (firstWord === word) {
      countX++;
    } else {
      countNotX++;
    }

    if (countX === countNotX) {
      sameCnt++;
      countX = 0;
      countNotX = 0;
      firstWord = '';
    }
  }

  if (firstWord) {
    sameCnt++;
  }

  return sameCnt;
}

test('문자열 나누기', () => {
  expect(solution('banana')).toBe(3);
})

4. 반성

  • 문제를 다른 방식으로 해결할 수 있는가?
    - 재귀를 이용해서 풀어볼 수 있을 것 같다. 


'코테연습' 카테고리의 다른 글

172. 할인행사 Javascript  (0) 2023.01.05
171.귤 고르기 Javascript  (0) 2023.01.04
167. n^2 배열 자르기 Javascript  (0) 2022.09.22
166. 124 나라의 숫자 Javascript  (0) 2022.09.22
165. 튜플 Javascript  (1) 2022.09.21

댓글