문제가 엄청 긴데 그냥 쉽게 말해서 주어진 배열에서 1, 2, 3, 1이 순서대로 있으면 이게 바로 햄버거 한 개! 만들어지면 없애주고 또 만들 수 있는 햄버거가 있나 확인하면 된다!
1. 사용할 자료구조 선언
2. 자료구조에 ingredient 배열에 있는 요소 추가
3. 조건 확인
- 햄버거 1개를 만드려면 최소 4개의 재료가 필요하므로 사이즈는 언제나 3보다 커야함
- 1, 2, 3, 1 이 순서대로 있어야 함
4. 조건을 만족하면 answer를 1 증가 시키고 사용한 재료를 제거함
그래서 처음엔 링크드리스트로 구현을 해봤는데
class Solutions{
public int solution(int[] ingredient) {
int answer = 0;
LinkedList<Integer> linkedList = new LinkedList<>();
for(int i = 0; i<ingredient.length; i++) {
linkedList.add(ingredient[i]);
if(linkedList.size() > 3
&& linkedList.get(linkedList.size()-4) == 1
&& linkedList.get(linkedList.size()-3) == 2
&& linkedList.get(linkedList.size()-2) == 3
&& linkedList.get(linkedList.size()-1) == 1) {
answer++;
for(int j = 0; j<4; j++) {
linkedList.remove(linkedList.size()-1);
}
}
}
return answer;
}
}
이 정도의 속도가 나왔고 자바에서 지원하는 stack 클래스를 사용했을 땐
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int i : ingredient) {
stack.push(i);
if (stack.size() > 3) {
int size = stack.size();
if(stack.get(size - 1) == 1
&& stack.get(size - 2) == 3
&& stack.get(size - 3) == 2
&& stack.get(size - 4) == 1) {
answer++;
stack.pop();
stack.pop();
stack.pop();
stack.pop();
}
}
}
return answer;
}
}
이런 결과가 나왔다
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Lv. 2] 영어 끝말잇기 (0) | 2023.07.30 |
---|---|
[Lv. 1] 개인정보 수집 유효기간 (0) | 2023.07.30 |
[Level 1] 숫자 문자열과 영단어 (0) | 2023.07.23 |
[고득점kit/완전탐색] 피로도 (0) | 2023.07.16 |
[고득점kit/완전탐색] 모의고사 (0) | 2023.07.06 |
댓글