프로그래머스 알고리즘 Level 1 햄버거 만들기

2023. 1. 24. 23:01알고리즘/문제

https://school.programmers.co.kr/learn/courses/30/lessons/133502#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

첫 번째 풀이 - 문자열 접근 ( 2개의 케이스 시간 초과로 실패 )

class Solution {
    fun solution(ingredient: IntArray): Int {
        var answer: Int = 0
        var copyIngredient = ingredient.joinToString("")
        while (true) {
            if (!copyIngredient.contains("1231")) break
            else {
                copyIngredient = copyIngredient.replaceFirst("1231", "")
                answer++
            }
        }
        return answer
    }
}

문자열로 접근해서 contains 로 분기만들고

replaceFirst로 1231 삭제하고 반복

시간 초과 Error

 

두 번째 풀이 - 정답, 스택 개념  

class Solution {
    fun solution(ingredient: IntArray): Int {
        var answer: Int = 0
        val list = mutableListOf<Int>()
        ingredient.forEach {
            list.add(it)
            val size = list.size
            if (size > 3) {
                if (list.elementAt(size - 1) == 1 && list.elementAt(size - 2) == 3 && list.elementAt(size - 3) == 2 && list.elementAt(
                        size - 4
                    ) == 1
                ) {
                    repeat(4, action = {list.removeLast()})
                    answer++
                }
            }
        }

        return answer
    }
}

mutableList 하나 만들어주고

ingredient 반복시킴.

list에 넣고

끝에서 4개만 확인함

1321이면 마지막 아이템 삭제 4번 반복

answer 하나 올리고

반복문 다 돌면 끝

시간 초과 해결