연속된 문자가 같으면 해당 문자를 지우는 과정을 반복한 후 최종적으로 모든 문자열을 지울 수 있으면 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);
}
}