[JAVA/프로그래머스] 2017 팁스타운: 짝지어 제거하기

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/12973

👊 도전

1. 설계

  1. Stack을 이용한다.
  2. 스택이 비어있으면 push
  3. top과 현재 문자(ch)같으면 pop
  4. 다르면 push
  5. 마지막에 스택이 비어있으면 성공, 아니면 실패이다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
import java.util.*;

class Solution
{
    public int solution(String s)
    {
        Stack<Character> st=new Stack<>();
        for(char ch:s.toCharArray()){
            if(!st.isEmpty() && st.peek()==ch) st.pop();
            else st.push(ch);
        }

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

3. 결과

실행결과 🤟 성공 🤟
문제 설명 그대로 StringBuilder를 이용하여 코드를 짰더니 실패+시간 초과가 떴다.
그런데 스택 사용이라니 세넓코잘많🤦‍♀️🤦‍♀️

4. 설명

  1. Stack을 이용한다
    • 문자 비교는 최근 값(내 주변 값)과 이루어지므로 스택을 사용하면 편리하다.
    • top은 내(ch) 앞에서 삭제되지 못한 문자가 되므로 만약 ch가 짝지어 제거되려면 top과 같거다 ch+1과 같아야 한다.
    • top과 같다면 짝이므로 pop, 아니라면 스택 top이 되어 다음 ch+1과 비교한다.
    • for문 수행 후 스택이 비어있다면 문자열 제거 성공이므로 1을, 아니라면 0을 리턴한다.

👏 해결 완료!

참고