https://school.programmers.co.kr/learn/courses/30/lessons/133502
이 문제는 "1231"인 경우 꺼내고 남겨진 것들에 또 "1231"을 찾는 문제이다.
처음에 이상한 접근을 생각했다.
포인터 두개 r,l을 통해서 같은 곳을 향하다가
1을 만나면 멈춰서서 r은 가만히 있고 l이 점차 4개의 자리를 나아가는 것이다. 나아가는데 그 값이 1231이라면 answer++을 하자
이렇게 접근했는데
위 방법은 너무 복잡했고 무엇보다 시간을 초과했기 때문에 다른 사람의 풀이를 참고했다.
이 문제는 Stack이라는 자료구조를 이용하는 문제이다.
따라서 Stack에 대한 메서드 정리가 필요하다
Stack의 사이즈나 4이상인 경우 검사를 하되
꼭대기로부터 -4인 값과부터 꼭대기까지의 값이
"1231"순서이면 answer++이다.
if(st.size()>=4){
if(st.get(st.size()-4)==1
&& st.get(st.size()-3)==2
&& st.get(st.size()-2)==3
&& st.get(st.size()-1)==1){
answer++;
st.pop();st.pop();st.pop();st.pop();
}
}
import java.util.*;
import java.io.*;
class Solution {
public int solution(int[] ingredient) {
Stack<Integer> st = new Stack<Integer>();
int answer=0;
for(int i=0;i<ingredient.length;i++){
st.push(ingredient[i]);
if(st.size()>=4){
if(st.get(st.size()-4)==1
&& st.get(st.size()-3)==2
&& st.get(st.size()-2)==3
&& st.get(st.size()-1)==1){
answer++;
st.pop();st.pop();st.pop();st.pop();
}
}
}
return answer;
}
}