1. 조건
문자열 s가 주어진다.
첫 글자를 x로 하고 x의 글자수를 순서대로 세기 시작한다
이 과정에서 x가 아닌 글자의 글자수도 동시에 센다.
x의 글자수와 x가 아닌 글자수가 일치하는 순간 글자를 슬라이싱하고 result를 1 증가시킨다.
문자열 s가 끝날때까지 반복하고 끝에는 글자수가 서로 달라도 슬라이싱을 진행하고 result를 1 증가시킨다.
1 <= s의 길이 <= 10,000
2. 풀이과정
최악의 경우를 생각하면 문자 슬라이싱을 5000번까지 진행해야할 수도 있다.
따라서 반복문안에서 slice()를 사용하는 방법보다
슬라이싱 조건이 충족하는 경우 각 count를 0으로 초기화해 가면서 진행하는게 속도측면에서 좋아보인다.
3. 풀이
function solution(s) {
let x = s[0];
let answer = 0;
let isX = 0;
let notX = 0;
for (let idx = 0; idx < s.length; idx += 1) {
if (isX === 0 && notX === 0) x = s[idx];
if (idx + 1 === s.length) {
answer += 1;
break;
}
if (s[idx] === x) {
isX += 1;
} else {
notX += 1;
}
if (isX === notX) {
isX = 0;
notX = 0;
answer += 1;
continue;
}
}
return answer;
}
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 가장 가까운 같은 글자 (0) | 2023.03.24 |
---|---|
[알고리즘] 명예의 전당 (1) (0) | 2023.03.23 |
[알고리즘] 프로그래머스 SQL(3) (0) | 2023.02.10 |
[알고리즘] 프로그래머스 SQL(2) (0) | 2023.02.09 |
[알고리즘] 프로그래머스 SQL(1) (0) | 2023.02.09 |