코딩 공부/코딩테스트

코딩테스트 연습문제 Lv. 1 (12) - 문자열 나누기

천서리 2023. 6. 21. 21:05
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 연습문제  Lv. 1

출처  https://programmers.co.kr/

 

프로그래머스

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

programmers.co.kr


문자열 나누기

문제

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

 

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

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

 

 

제한사항

  • 1 ≤ s의 길이 ≤ 10,000
  • s는 영어 소문자로만 이루어져 있습니다.

 

입출력 예

s result
"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

 

입출력 예 설명

 

입출력 예 #1

  • s="banana"인 경우 ba - na - na와 같이 분해됩니다.

 

입출력 예 #2

  • s="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.

입출력 예 #3

  • s="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.

 

solution.js

function solution(s) {
  let answer = 0;

  while (s.length > 0) {
    const x = s[0];
    let xCount = 1;
    let otherCount = 0;
    let i = 1;

    while (i < s.length && xCount !== otherCount) {
      if (s[i] === x) {
        xCount++;
      } else {
        otherCount++;
      }
      i++;
    }

    answer++;
    s = s.substring(i);
  }

  return answer;
}
  1. answer 변수를 0으로 초기화합니다. 이 변수는 분해한 문자열의 개수를 저장할 것입니다.
  2. 주어진 문자열 s의 길이가 0보다 큰 동안 반복합니다.
  3. 첫 번째 문자를 x 변수에 저장합니다.
  4. xCount 변수를 1로 초기화합니다. xCount는 문자열에서 x와 동일한 문자의 개수를 저장할 것입니다.
  5. otherCount 변수를 0으로 초기화합니다. otherCount는 문자열에서 x와 다른 문자의 개수를 저장할 것입니다.
  6. 인덱스 변수 i를 1로 초기화합니다. i는 문자열을 순회하기 위한 변수입니다.
  7. i가 문자열의 길이보다 작고, xCount와 otherCount가 서로 다른 동안 다음을 반복합니다.
  8. s[i]가 x와 동일한 경우, xCount를 1 증가시킵니다.
  9. 그렇지 않은 경우, otherCount를 1 증가시킵니다.
  10. i를 1 증가시킵니다.
  11. 현재까지 읽은 문자열을 분리하기 위해 answer를 1 증가시킵니다.
  12. s의 i 인덱스부터 끝까지의 문자열을 substring 함수를 사용하여 잘라내고, 잘라낸 부분을 s에 다시 저장합니다.
  13. 반복문을 통해 남은 부분에 대해 위의 과정을 반복합니다.
  14. 반복문이 종료되면 최종적으로 answer를 반환합니다.
반응형
Adventure Time - BMO