[알고리즘] Swift -프로그래머스 연습문제 #133502(햄버거 만들기)

2023. 6. 7. 01:45ALGORITHM/Swift

728x90
반응형

 

문제링크

 

 

 

 

분석

함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고,

상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 된다.

상수가 일하는 가게는 정해진 순서(아래부터, 빵-야채-고기-빵)으로 쌓인 햄버거만 포장을 한다.

상수는 손이 빠르기 때문에 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없다.

재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없다.

예를 들어 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일때,

상수는 6번째 재료가 쌓였을 때, 3번째~6번째를 이용하여 햄버거를 포장하고

9번째 재료가 쌓였을 때, 2번째와 7번째~9번째 재료를 이용하여 햄버거를 포장한다.

즉 2개의 햄버거를 포장하게 된다.

상수에게 전해지는 재료의 정보를 나타내는 정수가 주어질 때 상수가 포장하는 햄버거의 개수를 리턴하는 문제이다.

 

풀이 과정

순서는 무조건 빵-야채-고기-빵 의 순서로 햄버거를 포장해야한다.

1 = 빵, 2 = 야채, 3 = 고기

4개의 원소를 봤을 때 순서가 1,2,3,1 인 부분을 찾는다.

 

 

풀이

import Foundation

func solution(_ ingredient:[Int]) -> Int {
    var arr = [Int]()
    var result = 0

    for num in ingredient {
        arr.append(num)

        if arr.count > 3 {
            if arr[arr.count-4..<arr.count] == [1,2,3,1] {
                arr.removeLast(4)
                result += 1
            }
        }
    }

    return result
}

 

결과

print(solution( [2, 1, 1, 2, 3, 1, 2, 3, 1]           ))

 

 

 

 


📂  정리

다른사람의 풀이

import Foundation

func solution(_ ingredient:[Int]) -> Int {
    var arr = [Int]()
    var result = 0

    for num in ingredient {

        arr.append(num)
        let suffix = arr.suffix(4)
        if suffix == [1,2,3,1] {
            result += 1
            arr.removeLast(4)
        }
    }

    return result
}

suffix를 사용하여 마지막 원소 4개를 가져오게 된다.

여기서 suffix 를 따로 변수로 빼주지 않으면 시간 초과가 나온다.

for num in ingredient {
    arr.append(num)
    // let suffix = arr.suffix(4)
    if arr.suffix(4) == [1,2,3,1] {
        result += 1
        arr.removeLast(4)
    }
}

이유는 잘 모르겠다... 흠...

똑같은 게 아닌가보다.

 

 

728x90
반응형