👾 생각의 전개..
Stack을 쓰면 될 것같은 문제!
-> 빵-야채-고기-빵
-> 이 순서를 갖추게 되었다는 것을 어떻게 체크할까?
-> 현재 전달받은 재료들의 개수가 4개 이상이고, 마지막에 받은 재료가 빵이면? 그 때 체크
-> 위에서부터 pop 해보면서, 위의 재료 4개의 순서가 빵-고기-야채-빵
인지 확인해보자(Stack은 LIFO 니까 순서를 반대로)
-> 재료 4개의 순서를 확인해 봤는데, 만약에 순서가 빵-고기-야채-빵
이 아니면?
-> 안 쓰인 재료.. -> 다시 되돌려 놓아야 하니까
-> 임시 스택 tmp
를 두고 관리를 해보자
import java.util.*;
/*
stack의 size가 4 이상이고, top에 있는 애가 빵(1) 일 때
연속으로 4번 pop 했을 때 순서가 1321 이 되면 -> 햄버거 1개 count
아니면? 다시 집어넣고, 다음 재료 받아서 stack에 push 반복
*/
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
Stack<Integer> s = new Stack<>();
// 빵, 야채, 고기, 빵
// 1: 빵, 2: 야채, 3: 고기
// 1 2 3 1
for (int i = 0; i < ingredient.length; i++) {
s.push(ingredient[i]);
if (s.size() >= 4 && s.peek() == 1) {
Stack<Integer> tmp = new Stack<>();
String sequence = "";
for (int j = 0; j < 4; j++) {
sequence += Integer.toString(s.peek());
tmp.push(s.peek());
s.pop();
}
if (sequence.equals("1321")) {
answer++;
}
else {
for (int j = 0; j < 4; j++) {
s.push(tmp.peek()); // 돌려놓기
tmp.pop();
}
}
}
}
return answer;
}
}
🛠️ 리뷰
처음에 코드를 작성하면서, 아무 생각 없이 if문의 조건을.. sequence == "1321"
이런식으로 줬었습니다. ㅋㅋㅋㅠㅠ
하지만! 금방 알아채고 수정했으니까!! 다음에는 이런 실수를 하지 않도록 주의 해야겠습니다.
이상입니다.