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

이찬혁·2024년 3월 8일

알고리즘

목록 보기
16/72

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

연속된 문자가 같으면 해당 문자를 지우는 과정을 반복한 후 최종적으로 모든 문자열을 지울 수 있으면 1을 없으면 0을 반환하는 문제였다.
for문을 통해 해결해보려 했지만 문제 내용 중
문자열의 길이 : 1,000,000이하의 자연수
조건이 있어 시간 복잡도를 고려하여 이중 for문 대신 단일 for문 + stack을 사용하여 단순하게 풀이해보았다.

PairStringRemove.java

package com.example.Programmers.Lv2;

import java.util.Stack;

/**
 * 프로그래머스 Lv2 - 짝지어 제거하기
 */
public class PairStringRemove {
    public int solution(String s) {
        String[] arr = s.split("");
        Stack<String> stack = new Stack<>();

        for (String ele : arr) {
            // 스택이 비어있지 않고, 스택의 top 값이 배열의 원소와 같을 때 스택에서 제거
            if (!stack.isEmpty() && stack.peek().equals(ele)) {
                stack.pop();
            } else {
                stack.push(ele);
            }
        }

        return stack.isEmpty() ? 1 : 0;
    }
}

PairStringRemoveTest.java

package com.example.Programmers.Lv2;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class PairStringRemoveTest {

    @Test
    public void testPairStringRemove() {

        PairStringRemove psr = new PairStringRemove();
        int result1 = psr.solution("baabaa");
        int result2 = psr.solution("cdcd");

        assertEquals(1, result1);
        assertEquals(0, result2);
    }

}
profile
나의 개발로그

0개의 댓글