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

2023. 1. 3. 16:41기록/Programmers

    목차

문제 링크

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

 

프로그래머스

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

programmers.co.kr


나의 문제 풀이

function solution(s) {
  let answer = 0;
  let cntX = 0;
  let cntY = 0;
  let target = '';

  for (let i = 0; i < s.length; i++) {
    if (!target) target = s[i];

    target === s[i] ? cntX++ : cntY++;

    if (cntX === cntY) {
      answer++;
      cntX = 0;
      cntY = 0;
      target = '';
    }
  }
  if (target) answer++;
  return answer;
}
  • 0부터 주어진 문자열 s의 길이만큼 반복
  • target 이 빈 문자열일 경우 현재 요소를 넣어줌 (비교할 변수 초기화)
    • 맨 처음 for 문에 들어왔을 경우 
    • target 변수가 초기화된 후 for 문에 들어왔을 경우
  • target 과 현재 요소의 값이 같을 경우 X를 카운트, 아닐 경우 Y를 카운트 (Y는 임의의 이름)
  • 두 카운트 값이 같을 경우
    • 정답 변수에 1을 더해줌
    • X카운트, Y카운트 값, 비교할 변수 초기화
  • for 문이 종료된 후 target 값이 있을 경우
    • 분리되고 남은 문자이므로 정답 변수에 1을 더해줌

다른 사람의 문제 풀이

function solution(s, count = 0) {
    if(!s) return count;
    let [first, ...rest] = s.split("");
    let countSame = 1;
    let countInSame = 0;
    let i = 0;
    
    for(; i<rest.length; i++){
        if(rest[i] === first) countSame++;
        else countInSame++;
        if(countSame === countInSame) break;
    }
    return solution(rest.slice(i + 1).join(""), count + 1);
}