티스토리 뷰

코드카타

 

햄버거 만들기

 

문제

 

햄버거는 (빵 - 야채 - 고기 - 빵)으로 쌓여있고,

빵은 1, 야채는 2, 고기는 3에 해당하므로 햄버거는 1231에 해당한다.

 

재료 리스트에서 포장할 수 있는 최대 햄버거의 개수를 구한다.

 

 

입출력 예시

 

첫번째 재료로는 아래와 같은 과정으로 햄버거 2개를 만들 수 있다.

[2, 1, 1, 2, 3, 1] > 햄버거 추가 > [2, 1] > 재료추가 > [2, 1, 2, 3, 1] > 햄버거 추가 > [2] 의

 

두번째 재료로는 햄버거를 하나도 만들 수 없다.

 

 

정답

class Solution {
    fun solution(ingredient: IntArray): Int {        
        var res = 0 // 만들 수 있는 햄버거 개수  
        val s = StringBuilder() // 가변 문자열 처리 클래스 선언
        val hamburger = "1231" // 햄버거 구조
        
        for (i in ingredient) {
            s.append(i) // 순서대로 재료를 더함
            
            // 현재 재료로 햄버거를 만들 수 있다면
            // (현재 재료가 4개 이상 존재하고, 앞에서부터 4개의 재료가 햄버거 구조와 일치한다면)
            if (s.length >= 4 && s.substring(s.length - 4) == hamburger) {
                s.setLength(s.length - 4) // 현재 재료에서 햄버거를 뺴고 
                res++ // res에 1을 더함
            }
        }
    
        return res
    }
}

StringBuilder 클래스를 활용해 쉽게 풀 수 있다.

 

재료 배열의 길이가 최대 100만까지 주어지기 때문에 시간복잡도를 고려하여 StringBuilder를 사용했다.

StringBuilder에 정수를 추가하면 자동으로 해당 정수가 문자열로 변환되어 뒤에 추가된다.

 


 

StringBuilder 알아보기

 

StringBuilder란?

StringBuilder는 가변형 문자열을 생성하고 그 문자열의

조작이 가능한 Kotlin 클래스이다.

 

 

시간 복잡도 개선

문자열을 조작하려 할 때 일반적으로는 문자열을 변경하려면

새로운 문자열 객체가 생성해야하므로 성능에 부담이 가능 경우가 있다.

 

그러나 StringBuilder를 사용하면 문자열을 직접 수정할 수 있기에

새로운 문자열 객체를 생성하지 않아도 된다.

 

StringBuilder는 문자열의 조작과정이 효율적으로 이루어진다.
이는 문자열 변경 연산이 문자열 길이에 관계없이 일정한 시간으로 수행되기 때문이다.

 

 

append()

val s = StringBuilder("Let's")
s.append(" study")
println(s) // 출력: "Let's study"

append() 메서드를 사용해 문자열을 추가할 수 있다.

 

 

insert()

sb.insert(5, " Kotlin")
println(s)  // 출력: "Let's kotlin study"

insert() 메서드를 사용해 지정된 인덱스에 문자열을 추가할 수 있다.

 

 

delete()

s.delete(5,12)
println(s) // 출력: "Let's study"

delete() 메서드를 사용해 지정한 범위의 문자열을 삭제할 수 있다.

 

 

reverse()

s.reverse()
println(s) // 출력 결과 : "niltok s'teL"

reverse() 메서드를 사용해 문자열을 뒤집을 수 있다.

 

 

replace()

val s = StringBuilder("Let's study")
s.replace(6, 11, "sleep")
println(s) // Let's sleep

replace() 메서드를 사용해 지정한 범위의 문자열을 교체할 수 있다.

 

 

clear()

s.clear()
println(s) // 출력: ""

clear() 메서드를 사용해 객체를 빈 상태로 초기화할 수 있다.

 

 

자료형

fun returnStr(s: StringBuilder): String = return s.toString()
println(returnStr(s))

StringBuilder는 StringBuilder라는 자료형을 가지기 때문에 

문자열을 반환하려면 해당객체를 문자열로 변환해줘야 한다.

 


 

KPT 회고록 작성

 

 

 

2조 노션에 팀원들과 함께 프로젝트 회고록을 작성하였다.

 

KPT (Keep, Problem, Try) 회고록이란 

K(K: 유지할 점, P: 문제점, T: 시도할 점)을 작성한 회고록이다.

 

 

 

다들 열심히 해주셔서 나름 만족스럽게 프로젝트를 마무리 할 수 있었다. 👏👏

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함