Algorithm/Java

프로그래머스 - 햄버거 만들기 JAVA :: 133502

고고마코드 2023. 8. 2. 12:53
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/133502


문제 이해하기

재료의 순서는 무조건 [빵, 야채, 고기, 빵] 순서가 되어야 하고,
그 재료를 빼더라도 남은 재료의 순서는 보존해야 하는게 핵심입니다.

예제를 보면

  • [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]
    • 3번째부터 [빵, 야채, 고기, 빵]이 첫 번째 햄버거가 됩니다.
  • 첫 번째 햄버거의 재료를 제외하면 [야채, 빵, 야채, 고기, 빵]이 남게 됩니다.
    • 2번째부터 [빵, 야채, 고기, 빵]이 두 번째 햄버거가 됩니다.

재료가 담긴 배열을 순서대로 수행하면서 햄버거가 완성되면 재료를 빼고 기존 재료들은 기억하고 있으면서, 다음 재료를 순서대로 가져오면 됩니다. 예제를 그림으로 풀어보면 이런 그림이 됩니다.

이제 코드로 풀어보겠습니다.


문제 풀이

1번 풀이

public int solution(int[] ingredient) {
    int[] newIngredient = new int[ingredient.length];
    int idx = 0, answer = 0;
    for(int ing : ingredient) {
        newIngredient[idx] = ing;
        idx++;

        if(idx >= 4) {
            if(newIngredient[idx-4] == 1 && newIngredient[idx-3] == 2 && newIngredient[idx-2] == 3 && newIngredient[idx-1] == 1) {
                idx -= 4;
                answer++;
            }
        }
    }

    return answer;
}

newIngredient에는 햄버거 재료를 순서대로 넣습니다.
단, 햄버거가 완성되면 idx -= 4로 인덱스 조정을 해줍니다. (햄버거는 무조건 4개의 재료이므로)
이렇게 함으로써 기존 재료는 보존하면서 완성된 햄버거의 재료는 없앨 수 있습니다.

정확성 테스트

테스트 1 〉 통과 (0.02ms, 83.6MB)
테스트 1 〉 통과 (0.02ms, 83.6MB)
테스트 2 〉 통과 (0.02ms, 82.3MB)
테스트 3 〉 통과 (9.47ms, 92.2MB)
테스트 4 〉 통과 (12.51ms, 114MB)
테스트 5 〉 통과 (13.44ms, 119MB)
테스트 6 〉 통과 (8.40ms, 93.2MB)
테스트 7 〉 통과 (18.28ms, 97.4MB)
테스트 8 〉 통과 (11.97ms, 88MB)
테스트 9 〉 통과 (8.49ms, 106MB)
테스트 10 〉 통과 (0.54ms, 66.6MB)
테스트 11 〉 통과 (7.42ms, 89.7MB)
테스트 12 〉 통과 (14.15ms, 133MB)
테스트 13 〉 통과 (0.06ms, 69.5MB)
테스트 14 〉 통과 (0.03ms, 81.2MB)
테스트 15 〉 통과 (0.03ms, 67.9MB)
테스트 16 〉 통과 (0.03ms, 73.8MB)
테스트 17 〉 통과 (0.02ms, 75.1MB)
테스트 18 〉 통과 (0.01ms, 75.9MB)
반응형