강의로 돌아가기
qkdua45

(스포주의) 답은 맞췄는데, 이상하네요..

class Solution {
    fun solution(ingredient: IntArray): Int {
        var answer: Int = 0
        var items = ingredient.toMutableList()
        var pattern = listOf(1, 2, 3, 1)       
        var i = 0
        while (i <= items.size - 4) {
            if (i >= 0) {
                if (items.subList(i, i + 4) == pattern) {
                    answer++
                    items.subList(i, i + 4).clear()
                    i -= 5
                }
            }
            i++
        }        
        return answer
    }
}

이렇게 하면 정답이고

class Solution {
    fun solution(ingredient: IntArray): Int {
        var answer: Int = 0
        var items = ingredient.toMutableList()
        var pattern = listOf(1, 2, 3, 1)       
        var i = 0
        while (i <= items.size - 4) {
            if (i >= 0) {
                if (items.subList(i, i + 4) == pattern) {
                    answer++
                    items.subList(i, i + 4).clear()
                    i = -1  // 이 부분을 수정
                }
            }
            i++
        }        
        return answer
    }
}

이렇게 하면 시간초과가 나서 fail이네요.

첫 번째 코드처럼
햄버거 하나를 포장한 후,
i -= 5를 하면 i가 음수가 되어서 if(i > 0) 문에 걸리게 됩니다.
그러면 i++를 음수가 아닐 때까지 반복해서 처리하게 돼요.
i가 0이 될 때까지 불필요하게 반복해주지 말고, 햄버거 하나를 포장하면 i를 0으로 만들어주자는 생각이 들더군요.

그래서 두 번째 코드처럼
햄버거 하나를 포장하면 i를 -1로 만들고,
if 문을 빠져나가면 i++ 되어 i = 0 으로 만들어서 처리를 하려고 했더니 오히려 시간초과 오류가 나네요.

왜 그러는 걸까요.. 뭐 때문 일까요..

  • 명징.

    두번째 코드는 i=0을 만들어서 다시 처음부터 탐색해서 시간이 더 걸리지 않을까요? 또 items clear해줘도 size가 변하지 않아 끝까지 탐색을 많이 반복하는 듯 합니다

    명징.―2024.04.02 09:49
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.