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

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)
  • 태그

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

티스토리툴바