유형: 구현

풀이 시간 : 20분

 

1. 시간 초과 발생. 

def solution(ingredient):
    answer = 0
    i = 0
    while ingredient:
        if i > len(ingredient) - 3: 
            break
        if ingredient[i:i+4] == [1, 2, 3, 1]:
            del ingredient[i:i+4]
            answer += 1
            i = 0
        else:
            i += 1
    return answer

 

ingredient에 일치하는 부분을 발견한 뒤 i=0부터 다시 탐색하는 부분이 문제였던 것 같다.

다시 작성해보자. 

 

2. 정답 코드

def solution(ingredient):
    answer = 0
    i = 0
    while ingredient:
        if i > len(ingredient) - 3: 
            break
        if ingredient[i:i+4] == [1, 2, 3, 1]:
            del ingredient[i:i+4]
            answer += 1
            if i > 3:
                i -= 3
            else:
                i = 0
        else:
            i += 1
    return answer

 

- 종료 조건 : i가 len(ingredient) - 3보다 클 경우 => 체크끝, 반환

- 만약 ingredient[i:i+4] == [1, 2, 3, 1] 라면 포장

  => 이 부분을 ingredient에서 제거

  => answer에 +1

  * index update : 3칸 앞에서부터 새로 체크하면 된다. (그 앞부분은 삭제의 영향을 받지 않으므로, 체크할 필요가 없다.)

- ingredient를 찾지 못했다면 다음 index 탐색 

 

깔끔하게 동작한다. 

'프로그래머스 > Lv. 1' 카테고리의 다른 글

52. 키패드 누르기  (0) 2024.07.17
51. 크레인 인형뽑기 게임  (0) 2024.07.16
49. 숫자 짝꿍 ★ (Counter, union)  (0) 2024.07.16
48. 체육복  (0) 2024.07.16
47. 완주하지 못한 선수  (0) 2024.07.16
복사했습니다!