[알고리즘] 문자열 나누기

2022. 12. 15. 15:27·알고리즘
반응형

문제 설명

문자열 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와 같이 분해됩니다.

나의 풀이

function solution(s) {
    let answer = 0;
    
    const sArray = s.split("");
    let result =[];
    let compare = "";
    
    while(sArray.length !== 0) {
        const char = sArray.shift();
        
        if(!compare) {
            result.push(char);
            compare = char;
        }else {
            result.push(char);
            
            const filterResult = result.filter(data => data !== compare);
            
            if(result.length / 2 === filterResult.length) {
                result = [];
                compare = "";
                answer += 1;
            }
        }
    }
    
    if(result.length !== 0) answer +=1;

    return answer;
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] 옹알이  (0) 2022.12.19
[알고리즘] 햄버거 만들기  (0) 2022.12.16
[알고리즘] 과일 장수  (0) 2022.12.07
[알고리즘] 푸드 파이트 대회  (0) 2022.12.05
[알고리즘] 명예의 전당  (0) 2022.12.03
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 옹알이
  • [알고리즘] 햄버거 만들기
  • [알고리즘] 과일 장수
  • [알고리즘] 푸드 파이트 대회
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    next.js
    바질
    프로그래머스
    javascript
    네이버 부스트캠프
    네트워크
    webpack
    Docker
    react
    알고리즘
    CSS
    typescript
    리액트
    영어독학
    Node.js
    redux
    Babel
    영어회화
    다이소
    타일러영어
    덤프
    식물
    CCNA
    리얼학습일기
    ReactNative
    바질 키우기
    ChatGPT
    자바스크립트
    타입스크립트
    리얼클래스
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 문자열 나누기
상단으로

티스토리툴바