짝지어 제거하기

Mudi·2023년 2월 3일
0

[JavaScript] Coding Test

목록 보기
23/23
post-thumbnail

짝지어 제거하기

프로그래머스 짝지어 제거하기


문제

문자열 s가 주어질 때 연속되는 문자가 2개인 짝을 찾아 짝을 제거하고, 남은 문자열을 이어서 계속 연속되는 짝을 제거하는 것을 짝지어 제거라 합니다. 짝지어 제거 결과가 성공적이면 1, 아니면 0을 반환하는 함수를 완성해주세요.


제한

  • 문자열의 길이 : 1,000,000이하의 자연수
  • 문자열은 모두 소문자로 이루어져 있습니다.

접근

stack 배열을 먼저 만들고, for문으로 s를 탐색하면서 i번째 글자와 다음 글자가 같으면 넘어갑니다. 같지 않다면 stack에 넣어줍니다. 넣어준 후 바로 stack의 마지막 요소와 마지막에서 두번째 요소가 같은지 체크하여 같다면 두 개를 삭제해줍니다. 반복문이 종료되고 stack의 길이가 0이면 1반환, 아니면 0을 반환합니다.


풀이

stack 배열 만들기

let stack = [];

stack 배열 만들어 줍니다.


순회하기

for(let i = 0; i< s.length; i++){
        if(s[i] === s[i+1]){
            i++;
        } else {
         stack.push(s[i])
         if(stack[stack.length-1] === stack[stack.length-2]){
            stack.splice(stack.length-2,2);
        };    
        };
    };
  • si번째와 i+1번째가 같다면 i++ 해주어 다음 요소로 넘어가게 합니다.
  • 같지 않다면 stack 배열에 넣고, stack의 마지막 요소(금방 넣은 요소)와 마지막에서 두번째 요소가 같은지 확인하여 같다면 splice로 마지막 두 개의 요소를 삭제해 줍니다.

결과 반환

return stack.length === 0 ? 1 : 0;

stack의 길이가 0이면 1을 반환, 아니면 0을 반환해줍니다.


나의 코드

function solution(s){
    let answer = -1;
    let stack = [];
    for(let i = 0; i< s.length; i++){
        if(s[i] === s[i+1]){
            i++;
        } else {
         stack.push(s[i])
         if(stack[stack.length-1] === stack[stack.length-2]){
            stack.splice(stack.length-2,2);
        };    
        };
    };
    return stack.length === 0 ? 1 : 0;
}

0개의 댓글