TIL/kotlin 알고리즘

kotlin 프로그래머스 lv1 햄버거 만들기

crablo 2024. 2. 19. 16:48
728x90

문제에서 상수가 

빵, 야채,고기,빵 순서대로 포장한다고 했고,

순서대로 빵->1/야채->2/고기->3

이라고 했다.

그래서 나는 포장순서대로 숫자타입의 배열로 변수를 만들었었다.

그 후 ingredient 배열에서 [1,2,3,1] 배열이 몇개 나오는지 테스트 해봤고

테스트는 모두 정답이었다.

 

class Solution {
    fun solution(ingredient: IntArray): Int {
        val prepareSlice = intArrayOf(1, 2, 3, 1)
        return (0..ingredient.size - prepareSlice.size)
            .count { ingredient.sliceArray(it until it + prepareSlice.size).contentEquals(prepareSlice) }
    }
}

 

하지만 채점은 33점으로 실패했다.

그래서 다른 사람들 코드를 참조했는데 StringBuilder 를 이용해서 실행 속도를 높일 수 있다하였다.

 

코드를 설명해보자면

for(item in ingredient) //입력으로 받은 ingredient를 순회하면서

sb.append('0' + item) //현재 순회 중인 배열 요소 item을 문자열로 변환하여 sb 객체에 추가한다.

그래서 만약 sb의 길이가 4이상이고, 전체 길이에서 마지막 4글자가 "1231" 이라면

 마지막 4글자를 제외한 나머지 문자열을 남기고 sb길이를 업데이트한다.

그리고 패턴이 발견되어 answer를 증가시킨다.

에러가 나서 다른사람들 풀이가 길어질줄알았는데 생각보다 단순히 생각해서 놀랐다.

앞으로 스파르타 코딩클럽 본과정에 들어가면 함수를 다시 정리해서 문제에 접목 시켜야할것 같다.

728x90