https://school.programmers.co.kr/learn/courses/30/lessons/12973
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 (JAVA)
import java.util.*;
class Solution
{
public int solution(String s)
{
int answer = 0; // 기본 리턴 0 세팅
Stack<Character> stack = new Stack<>();
char [] ch = s.toCharArray();
for(int i=0; i<ch.length; i++){
if(i == 0){ // 첫번째 스택은 무조건 추가
stack.push(ch[i]);
continue; // 아래 조건 돌지 않고 i++
}
// 스택에 데이터가 들어 있고, 스택의 최상단값이 비교할 값과 같다면
if(stack.size() > 0 && ch[i] == stack.peek()){
stack.pop(); // 스택의 최상단 값 제거
}else{ // 스택의 최상단값이 같지 않다면 스택에 추가
stack.push(ch[i]);
}
}
// 스택이 비어 있을시 모두 짝지은 문자이므로 제거 되어 1 리턴
if(stack.size() == 0){
answer = 1;
}
return answer;
}
}
주요 핵심 포인트
1. 짝지은 문자가 들어 왔을 때를 처리하는 것은 스택의 대표적인 문제인 '괄호' 문제와 같은 개념으로 스택으로 풀게 되었다.
2. 스택의 사이즈를 체크하지 않고 pop()시 사이즈를 체크하지 않으면 오류가 난다.
3. 첫번째 스택은 무조건 추가하도록 하였다.
4. for문이 모두 돌고 스택이 비어있다면 모두 짝인 문자이다.
개선해야할 사항
1. i == 0 대신 stack.size() == 0 일때 조건을 거는것으로 바꾸는 풀이 방법 또한 있다.