유자차의 재테크 공부방

[프로그래머스] 햄버거 만들기 본문

파이썬/알고리즘 문제 풀이

[프로그래머스] 햄버거 만들기

유자차H 2023. 1. 13. 15:44
반응형

프로그래머스 Lv1. 햄버거 만들기 [문제]   

 

풀이 방법 1(실패)

replace() 사용 -> 시간초과

def solution(ingredient):
 
    answer=0
    ingredient = "".join(str(i) for i in ingredient) # list to string
    while ingredient.find("1231") != -1:
        ingredient = ingredient.replace("1231", "",1)
        answer+=1
    
    return answer

 

풀이방법 2(성공)

index를 사용해서 4개씩 보고 맞으면 del로 삭제.

삭제시킨 index-2부터 4개씩 확인 필요 ex) 12123131

index-3 불가능. 1231231이기때문에 이미 충족이 되어버려 앞부분 없어짐.

def solution(ingredient):
    
    ans=0
    idx=0
    len_check=len(ingredient)
    while True:
        for i in range(idx, len(ingredient)-3):
            if ingredient[i:i+4] == [1,2,3,1]:
                del ingredient[i:i+4]
                ans+=1
                if i > 2:
                    idx=i-2
                else:
                    idx=0
                break
        if len_check == len(ingredient):
            break
        else:
            len_check = len(ingredient)
                    
    return ans

 

풀이방법 3(시간 단축)

ingredient에서 하나씩 받아와서 최근 4개를 확인하여 del로 삭제

def solution(ingredient):
    ans=0
    check=[]
    for i in ingredient:
        check.append(i)
        if check[-4:] == [1,2,3,1]:
            del check[-4:]
            ans+=1
    return ans

풀이방법 2                                                                 풀이방법 3                                                                    풀이방법4

풀이방법2는 반복되는 부분이 있어, 풀이방법3과 4와 시간 차이를 보인다.

3과 4는 삭제하는 방법이 다른데 pop보단 del로 삭제하는 것이 조금 더 좋아보인다.

 

풀이방법 4

del 대신 pop으로 삭제

def solution(ingredient):
    
    ans=0
    check=[]
    for i in ingredient:
        check.append(i)
        if check[-4:] == [1,2,3,1]:
            check.pop()
            check.pop()
            check.pop()
            check.pop()
            ans+=1
    return ans
반응형
Comments