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

그녕·2024년 4월 17일
0

알고리즘 문제 풀이

목록 보기
31/35

문제 링크

def solution(ingredient):
    answer = 0
    ans=''
    stack=[]
    #1231만 햄버거
    for i in range(len(ingredient)):
        ans+=str(ingredient[i])
    while 1:
        if "1231" in ans:
            if ans.count("1231")>1:
                answer+=ans.count("1231")
                ans = ans.replace("1231","")
            else:
                ans = ans.replace("1231","")
                answer+=1
        else:
            return answer
            break

이렇게 코드를 짜니
입력 값 : [1, 2, 1, 2, 3, 1, 3, 1, 2, 3, 1, 1]
기댓값 〉 2
실행 결과 〉3
이 테스트코드에서 다른 결과가 나왔다. 밑에서부터 1,2,3,1을 체크했을 때, 다시 밑으로 돌아가서 체크해야하는데 연속될경우 그냥 연속된 애들을 다 없애는걸로 짜서 오류가 났다.

def solution(ingredient):
    s= []
    cnt =0
    for i in ingredient:
        s.append(i)
        if s[-4:] == [1,2,3,1]:
            cnt+=1
            for i in range(4):
                s.pop()
    return cnt

이렇게 짜니깐 잘 됐다. 이 방법도 처음에 생각했었는데 s[-4:]도 할수 있는지 몰라서 못 짰었다. 이렇게 짤수 있는지 처음 알았다리..


for i in range(4):
    s.pop()
    
대신에 
                               
del s[-4:]

del함수를 써도 된다!

리스트 슬라이싱을 한번더 정확히 짚고 넘어가자면
s가 [1, 2, 3, 4, 5, 6, 7, 8, 9]일때
s[-4:]는 [6,7,8,9]를 반환한다. 인덱스 -4가 6이므로 6부터 끝까지라는 말
s[:-4]는 [1,2,3,4,5]를 반환한다. 처음부터 6전까지니깐!

0개의 댓글