프로그래머스 - 문자열 나누기[JS]

2022. 12. 19. 20:18·알고리즘(Algorithm)
728x90
반응형

문제 설명

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

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

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

[!] x와 x가 아닌 다른 글자들이 나온 횟수를 "각각" 셉니다.

아래 2개 예시를 보면 단번에 이해가 가능할 것이다

banana 일때 x는 'b'

x가 나온 횟수는 1번, x가 아닌 다른 글자들이 나온 횟수는 'a' -> 1번 -> 'ba'로 분리

x는 'n', x가 아닌 다른 글자들이 나온 횟수는 'a' -> 1번 -> 'na'로 분리

 

aaabbaccccabba
x='a'
x가 나온 횟수 aaa 3번
x가 아닌 다른 글자 'b' -> 2번 (건너뜀)
x가 나온 횟수 a 4번
x가 아닌 다른 글자 'c' -> 2번

[!] x는 총4번 나왔고,x가 아닌 글자'b'는 2번 'c'는 4개가 있지만 나온 횟수가 동일하면
문자열을 끊어야 하기에 2번째 'c'에서 자름

'aaabbacc'
남은 글자
'ccabba'
x='c'
x가 나온 횟수 cc 2번
x가 아닌 다른 글자 'a' -> 1번
x가 아닌 다른 글자 'b' -> 1번
'ccab'

첫 번째 시도 코드 [ 어렵게 생각함]

let count = 0;
function solution(s) {
  let lenArr = [];
  let xCount = 0;
  let notXcount = 0;
  let sArr = s.split("");
  while (sArr.length > 0) {
    checkArr(sArr,lenArr,xCount,notXcount)
    if(sArr.length===1) {
      count++
      break
    }
    if(count===0){
      count++
      break
    }
  }
  return count
}

const checkArr=(sArr,lenArr,xCount,notXcount)=>{
  for (let i=0;i<sArr.length;i++) {
    let x = sArr[0];
    if (sArr[i] === x) {
      xCount += 1;
    } else {
      notXcount += 1;
    }
    if (xCount === notXcount) {
      helper(sArr, lenArr, xCount + notXcount);
      xCount = 0;
      notXcount = 0;
    }
  }
}
const helper = (sArr, lenArr, hap) => {
  for (let i = 0; i < hap; i++) {
    lenArr.push(sArr.shift());
  }
  count++
};

테스트3,9~30,32,35,36,38~42 실패

 

두 번째 코드

function solution(s) {
  let x;
  let xCount=0
  let notXcount=0
  let count = 0;
  for (const i of s) {
    if(!x) x=i
    if(x===i) xCount++;
    else notXcount++;
    if(xCount===notXcount){
      count++
      xCount=0
      notXcount=0
      x=""
    }
  }
  if(x) count++
  return x
}

 

 

문제에 접근할 때 너무 어렵게 생각한듯 싶다.

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

프로그래머스 - 모의고사 [JS]  (0) 2022.12.30
프로그래머스 - 크기가 작은 부분문자열[JS]  (0) 2022.12.23
프로그래머스 - 가장 가까운 글자 [JS]  (1) 2022.12.18
프로그래머스 시저 암호 [JS]  (0) 2022.12.17
unsigned int  (0) 2022.10.04
'알고리즘(Algorithm)' 카테고리의 다른 글
  • 프로그래머스 - 모의고사 [JS]
  • 프로그래머스 - 크기가 작은 부분문자열[JS]
  • 프로그래머스 - 가장 가까운 글자 [JS]
  • 프로그래머스 시저 암호 [JS]
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바스크립트 #연습문제
      Algorithm
      알고리즘
      Javascript
      JS #클래스
      JavaScript #Set #Collection
      Programmers
      c++
      알고리즘 #Algorithm
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      프로그래머스
      티스토리챌린지
      SQL
      BaekJoon
      Python #알고리즘
      JS #JavaScript #프로그래머스 #카카오
      고득점 Kit
      리눅스 #입문
      async await #js #문법 #자바스크립트 #비동기
      Vue #Vue.js #정리
      백준
      JS #프로그래머스 #숫자의표현 #알고리즘
      LeetCode #JS #Javascript #Algorithm
      리눅스
      자바스크립트
      JS #정규표현식
      오블완
      프로그래머스 #자바스크립트 #JS
      JS #JavaScript #프로그래머스 #알고리즘
      JS #javascript #객체 #Object
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    프로그래머스 - 문자열 나누기[JS]
    상단으로

    티스토리툴바

    티스토리툴바