👀 문제
https://programmers.co.kr/learn/courses/30/lessons/12973
👊 도전
1. 설계
- Stack을 이용한다.
- 스택이 비어있으면 push
- top과 현재 문자(ch)같으면 pop
- 다르면 push
- 마지막에 스택이 비어있으면 성공, 아니면 실패이다.
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. 설명
- Stack을 이용한다
- 문자 비교는 최근 값(내 주변 값)과 이루어지므로 스택을 사용하면 편리하다.
- top은 내(ch) 앞에서 삭제되지 못한 문자가 되므로 만약 ch가 짝지어 제거되려면 top과 같거다 ch+1과 같아야 한다.
- top과 같다면 짝이므로 pop, 아니라면 스택 top이 되어 다음 ch+1과 비교한다.
- for문 수행 후 스택이 비어있다면 문자열 제거 성공이므로 1을, 아니라면 0을 리턴한다.
👏 해결 완료!
참고
- [프로그래머스, 자바] 짝지어 제거하기 - 스택 https://lkhlkh23.tistory.com/148