https://school.programmers.co.kr/learn/courses/30/lessons/140108#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제:
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한사항:
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
실행코드
function solution(s) {
let stack = [];
let count = 0;
for (let i = 0; i < s.length ; i++){
stack.push(s[i]);
const same = stack.filter((item) => item === stack[0]);
const notSame = stack.filter((item) => item !== stack[0]);
if(same.length === notSame.length){
count += 1;
stack = [];
}
}
if (stack.length !== 0){
count += 1;
}
return count;
}
stack에 문자를 넣어줍니다. 스택 가장 아래에 있는 문자가 기준이 되는 문자 입니다.
filter()를 통해 기준 글자와 같은 배열, 같지 않은 배열을 생성합니다.
이 둘의 길이가 같다면, 문제 조건에 부합하므로 count를 1 증가시킵니다.
다음 케이스를 판별하기 위해 스택을 초기화 시켜줍니다.
주어진 문자열의 끝까지 이를 반복합니다.
만약, 스택에 값이 남아있다면 처리되지 않은 문자열이므로, 이들은 하나의 문자열로 봅니다. 따라서, count가 1 증가 합니다.
count는 곧 분해한 문자열의 개수 입니다.
Array.filter() 는 JavaScript에서 배열의 각 요소를 테스트하여 콜백 함수의 결과가 true인 요소만을 모아 새로운 배열을 만드는 메소드입니다.
ex)
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(number => number % 2 === 0);
console.log(evenNumbers); // Output: [2, 4, 6]
'알고리즘 > test' 카테고리의 다른 글
javascript) 프로그래머스 - 푸드 파이트 (0) | 2023.02.09 |
---|---|
javascript) 프로그래머스 - 명예의 전당 (1) (0) | 2023.02.08 |
javascript) 프로그래머스 - 가장 가까운 같은 글자 (0) | 2023.02.06 |
javascript) 프로그래머스 - 크기가 작은 부분문자열 (0) | 2023.02.06 |
javascript) 프로그래머스 - 개인정보 수집 유효기간 (0) | 2023.02.05 |