Algorithm/프로그래머스

[Lv. 1] 햄버거 만들기

녱녱 2023. 7. 29.

문제가 엄청 긴데 그냥 쉽게 말해서 주어진 배열에서 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;
	}
}

이런 결과가 나왔다

댓글