stack 구조를 활용하여 순차적으로 들어오는 char의 중복을 체크하여 제거하는 프로그램을 작성하였다.
stack에 각각의 char와 각 char의 갯수를 세기위한 int값이 필요했기 때문에 새로운 Node라는 구조체를 만들어서 해당 구조체형으로 stack을 생성하였다.
다음에 들어오는 char의 갯수를 count하고 해당 count의 값이 주어진 값이 되면 해당 char을 stack에서 삭제하는 방법으로 알고리즘을 구현하였다.
사실 stack의 개념에 대해서 잘 모르고 있었고, 다른 코드를 참조하여 문제를 풀었지만, 이 문제를 풀면서 stack의 개념에 대해서 조금 알게 되었고, 앞으로 비슷한 문제를 풀면서 stack을 이용한 풀이에 익숙해지자 !
문제 출처 : https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/submissions/
package pps_camp;
import java.util.Arrays;
import java.util.Stack;
class Node{
char ch;
int count;
public Node(char a, int cnt) { //구조체 만두르기
this.ch = a;
this.count = cnt;
}
}
public class Day10_I2 {
public static void main(String[] argv) {
String a = "deeedbbcccbdaa";
int k = 3;
char[] str = a.toCharArray();
Stack<Node> sk = new Stack<Node>(); //해당 구조체 형태의 stack 선언
for(int i = 0; i < a.length(); i++) {
if(!sk.isEmpty() && sk.peek().ch == str[i])
sk.peek().count++;
else
sk.push(new Node(str[i],1));
if(sk.peek().count == k) {
sk.pop();
}
}
StringBuilder sb = new StringBuilder();
while(!sk.isEmpty()) {
Node nd = sk.pop();
while(nd.count >0) {
sb.append(nd.ch);
nd.count--;
}
}
String ans = sb.reverse().toString();
System.out.println(ans);
}
}