문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.
제한사항
- 1 ≤ ingredient의 길이 ≤ 1,000,000
- ingredient의 원소는 1, 2, 3 중 하나의 값이며, 순서대로 빵, 야채, 고기를 의미합니다.
정답
import java.util.*;
class Solution {
public int solution(int[] ingredient) {
int answer = 0;
List<Integer> numList = new ArrayList<>();
List<Integer> burger = new ArrayList<>();
burger.add(1);
burger.add(2);
burger.add(3);
burger.add(1);
for(int num : ingredient) {
numList.add(num);
}
int i = 0;
int k = numList.size() - 3;
while(i <= k){
if(numList.get(i) == burger.get(0) && numList.get(i+1) == burger.get(1) && numList.get(i+2) == burger.get(2) && numList.get(i+3) == burger.get(3)) {
numList.remove(i+3);
numList.remove(i+2);
numList.remove(i+1);
numList.remove(i+0);
answer++;
k-=4;
if(i-4 >= -1) i -= 4;
else i = -1;
}
i++;
}
return answer;
}
}
풀이
버거는 빵 – 야채 – 고기 - 빵 순으로 만들기 때문에 burger리스트를 만들어서 1, 2, 3, 1로 넣어두었습니다.
그 후에 리스트를 돌면서 버거와 같은면 리스트에서 버거 재료 만큼 삭제를 하였습니다.
이때 리스트를 다시 처음부터 시작하면 시간이 많이 걸리게 됩니다.( ingredient가 최대 1,000,000개 )
따라서 리스트를 4개 정도 전부터 돌도록 하여 전에 있던 재료와 버거가 만들어 질 수 있도록 하여 문제를 풀었습니다.
예)
[2, 1, 1, 2, 3, 1, 2, 3, 1] 와 같은 경우 [1, 2, 3, 1]를 처음 만들면 [2, 1, 2, 3, 1] 이렇게 되고 앞에 하나남은 1과 뒤에 2, 3, 1가 합쳐지면서 버거가 하나 더 만들어집니다. 따라서 답은 2가 됩니다.
테스트 케이스
[1, 2, 3, 1, 1, 2, 3, 1] 2
[1, 1, 1, 2, 3, 1, 2, 3, 1, 1, 2, 3, 1] 3
[1, 1, 2, 3, 3, 1, 2, 3, 1, 2, 3, 1] 1
[1, 2, 3, 2, 1, 2, 3, 1, 1] 1
[1, 2, 1, 2, 3, 1, 3, 1] 2
[2, 1, 1, 2, 1, 2, 1, 2, 3, 1, 3, 1, 3, 1, 2, 3, 1] 4
'프로그래머스 코딩테스트 > JAVA' 카테고리의 다른 글
[프로그래머스] 바탕화면 정리 JAVA (0) | 2024.10.12 |
---|---|
[프로그래머스] 성격 유형 검사하기 JAVA (1) | 2024.10.12 |
[프로그래머스] 둘만의 암호 JAVA (0) | 2024.09.20 |
[프로그래머스] N개의 최소공배수 JAVA (0) | 2024.09.12 |
[프로그래머스] 예상 대진표 JAVA (4) | 2024.09.08 |