티스토리 뷰
TIL 5일차 (햄버거 만들기 - Kotlin | StringBuilder 알아보기 | KPT 회고록 작성)
하몬드 2024. 5. 31. 10:07코드카타
햄버거 만들기
문제
햄버거는 (빵 - 야채 - 고기 - 빵)으로 쌓여있고,
빵은 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: 시도할 점)을 작성한 회고록이다.
다들 열심히 해주셔서 나름 만족스럽게 프로젝트를 마무리 할 수 있었다. 👏👏
'내일배움캠프 > Android 국비지원' 카테고리의 다른 글
TIL 6일차 (성격 유형 검사하기 | Kotlin, Map 알아보기) (1) | 2024.06.02 |
---|---|
9 to 9 개발 공부 1주일동안 해본 소감 (0) | 2024.05.31 |
TIL 4일차 (둘만의 암호 - Kotlin | 팀원 소개 앱 개발 과정 정리) (0) | 2024.05.30 |
TIL 3일차 (대충 만든 자판 - Kotlin | Git 세션 정리) (1) | 2024.05.29 |
TIL 2일차 (문자열 나누기 - Kotlin | 앱 개발 용어 정리 | 프로젝트 관련 피드백 정리) (1) | 2024.05.28 |