[프로그래머스] 문자열 나누기
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);
}