class Solution {
public int solution(int[] ingredient) {
int answer = 0;
StringBuilder result = new StringBuilder();
for (int i = 0; i < ingredient.length; i++) {
result.append(ingredient[i]);
if (result.length()>3) {
if (result.charAt(result.length()-1)=='1'
&& result.charAt(result.length()-2)=='3'
&& result.charAt(result.length()-3)=='2'
&& result.charAt(result.length()-4)=='1'
) {
answer++;
result = new StringBuilder(result.substring(0,result.length()-4));
}
}
}
return answer;
}
}
처음엔 contains와 replace로 해당 문자열을 제거해줬는데, 오답이 되었다.
왜냐하면 내가 문제를 잘못 이해했던 것이다. 햄버거 재료가 쌓이면 그때 위에서만 제거하는 것인데!
그래서 맨 마지막부터 4번째까지 무엇이 오는지 확인하고 그만큼 제거해주는 방식으로 다시 문제를 풀었다.
class Solution {
public int solution(int[] ingredient) {
int[] stack = new int[ingredient.length];
int sp = 0;
int answer = 0;
for (int i : ingredient) {
stack[sp++] = i;
if (sp >= 4 && stack[sp - 1] == 1
&& stack[sp - 2] == 3
&& stack[sp - 3] == 2
&& stack[sp - 4] == 1) {
sp -= 4;
answer++;
}
}
return answer;
}
}
배열을 String으로 바꾸지 않고 바로 풀었다!
sp로 재료의 개수를, stack 배열로 해당 재료가 무엇인지 확인하는 것이다.
for문을 돌리며 삭제를 하지 않고 덮어씌운다는 생각을 하다니! 많이 배워야겠다.