728x90
조건
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.( 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다, 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.)
알고리즘 예상
- count를 이용해 알파벳이 짝수번째인지, 홀수번째인지를 확인한다.
- 짝수번째이면 대문자로, 홀수번째이면 소문자로 answer에 넣고 count를 1 늘린다.
- 확인하는 원소가 ' '(공백)이면 answer에 추가한 후 count를 0으로 초기화한다.
초기 코드
class Solution {
fun solution(s: String): String {
var answer = ""
return answer
}
}
내 코드
class Solution {
fun solution(s: String): String {
var answer = ""
var count = 0
for(i in s.toCharArray()){
when{
i == ' ' -> {
answer += i
count = 0
}
count%2 == 0 ->{
answer += i.toUpperCase()
count ++
}
else -> {
answer += i.toLowerCase()
count++
}
}
}
return answer
}
}
' '를 기준으로 여러개의 문자열로 나누어 forEach나 map을 이용하는 방법도 있을 것 같다.
다른 사람의 풀이
class Solution {
fun solution(s: String) =
s.split(" ").joinToString(" ") { word ->
word
.mapIndexed { index, char ->
if (index % 2 == 0) char.toUpperCase() else char.toLowerCase()
}
.joinToString("")
}
}
개선점 또는 배운점
- ' '을 기준으로 여러개의 문자열로 나누는 방법이 나왔다. split을 이용하면 기준점을 이용해 여러개의 문자열로 나눌 수 있고 joinToString을 이용해 나누어진 문자열 별로 mapIndexed를 이용해 콜렉션을 만든 뒤 joinToString을 통해 문자열로 바꾸어주는 방법이다.
개선된 코드
class Solution {
fun solution(s: String): String {
var answer = ""
answer = s.split(" ").joinToString(" ") {
s -> s.mapIndexed { index, c -> if(index%2 == 0) c.toUpperCase() else c.toLowerCase() }.joinToString("")
}
return answer
}
}728x90
'TIL > 알고리즘' 카테고리의 다른 글
| 02/13 알고리즘 공부(43) - 크기가 작은 부분문자열 (0) | 2024.02.13 |
|---|---|
| 02/13 알고리즘 공부(42) - 삼총사 (1) | 2024.02.13 |
| 02/13 알고리즘 공부(40) - 3진법 뒤집기 (1) | 2024.02.13 |
| 02/07 알고리즘 공부(39) - 최대공약수와 최소공배수 (0) | 2024.02.07 |
| 02/07 알고리즘 공부(38) - 직사각형 별찍기 (0) | 2024.02.07 |