일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- android ar 개발
- 안드로이드 레트로핏 crud
- jvm 작동 원리
- 플러터 설치 2022
- 안드로이드 os 구조
- 자바 다형성
- 2022 플러터 설치
- 객체
- 서비스 쓰레드 차이
- ar vr 차이
- 멤버변수
- android retrofit login
- 안드로이드 유닛 테스트 예시
- 스택 자바 코드
- 클래스
- 안드로이드 유닛 테스트
- 큐 자바 코드
- 스택 큐 차이
- 안드로이드 유닛테스트란
- jvm이란
- 안드로이드 레트로핏 사용법
- rxjava disposable
- 2022 플러터 안드로이드 스튜디오
- rxjava cold observable
- Rxjava Observable
- rxjava hot observable
- 서비스 vs 쓰레드
- ANR이란
- 안드로이드 라이선스
- 안드로이드 라이선스 종류
- Today
- Total
나만을 위한 블로그
[Algorithm] 프로그래머스 - 문자열 섞기 (Kotlin) 본문
길이가 같은 문자열 str1, str2가 있을 경우, 두 문자열의 각 문자가 앞에서부터 서로 번갈아가며 1번씩 등장하는 문자열을 만들어 리턴하는 함수를 완성하라
문제의 요구사항 중 특이한 것은 아래 정도다.
- 두 문자열은 길이가 같다
- 두 문자열은 모두 소문자다
- 항상 str1의 첫 문자부터 출력된다
그렇다면 두 문자열의 인덱스를 담을 변수를 하나씩 총 2개 만들고, 반복해서 str1, str2의 각각 해당 인덱스의 위치에 있는 문자를 가져와 이어붙이면 될 것이다.
class Solution {
fun solution(str1: String, str2: String): String {
val sb = StringBuilder()
val str1Len = str1.length
val str2Len = str2.length
var a = 0
var b = 0
while (a < str1Len && b < str2Len) {
sb.append(str1[a])
a++
sb.append(str2[b])
b++
}
return sb.toString()
}
}
a, b는 각각 str1, str2의 인덱스에 조회하기 위해 선언한 변수다. while문 안에서 이어붙이는 작업이 끝나면 각 변수를 +1해준다. 그래야 다음 위치의 인덱스에 접근해서 StringBuilder에 이어붙일 수 있기 때문이다.
리턴타입이 String이기 때문에 StringBuilder 변수에 toString()을 붙이는 걸 잊지 않는다.
코틀린이 제공하는 zip()을 쓰면 좀 더 간결하게 풀 수 있다.
class Solution {
fun solution(str1: String, str2: String) = str1.zip(str2).joinToString("") { (a, b) -> "$a$b" }
}
zip()에 대한 내용은 아래와 같다.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/zip.html
infix fun <T, R> Array<out T>.zip(
other: Array<out R>
): List<Pair<T, R>>
이 배열과 같은 인덱스를 가진 다른 배열의 요소로 구성된 Pair의 리스트를 리턴한다. 리턴된 리스트에는 가장 짧은 컬렉션의 길이가 있다
코틀린 기준으로 Pair는 (a, b) 형태로 2가지 값을 리턴하는 data class다.
str1의 첫 문자열이 먼저 출력되기 때문에 str1을 대상으로 zip()을 호출한다. 그리고 zip()의 매개변수로 str2를 넣고, joinToString("")을 써서 하나의 문자열로 만들어준다.
joinToString("") 뒤에 잇따르는 후행 람다는 반드시 존재해야 한다. 만약 없다면 아래와 같이 출력된다.
(a, b)(a, b)(a, b)(a, b)(a, b)
앞서 확인했듯 zip()은 Pair로 구성된 리스트를 리턴한다. 그래서 그대로 문자열로 변환하면 위 출력 결과와 같이 소괄호와 콤마가 같이 출력된다.
그래서 joinToString()의 후행 람다 안에서 Pair 형태로 변수를 선언한 뒤, 그 변수로 들어오는 값들을 문자열 형태로 처리하는 코드가 필요하다.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 문자열 곱하기 (Kotlin) (0) | 2023.12.02 |
---|---|
[Algorithm] 프로그래머스 - 문자 리스트를 문자열로 변환하기 (Kotlin) (0) | 2023.12.02 |
[Algorithm] 프로그래머스 - 문자열 겹쳐쓰기 (Kotlin) (0) | 2023.12.02 |
[Algorithm] 프로그래머스 - 문자열 돌리기 (Kotlin) (0) | 2023.12.02 |
[Algorithm] 프로그래머스 - 문자열 붙여서 출력하기 (Kotlin) (0) | 2023.12.02 |