안녕하세요. 이번에는 프로그래머스 JadenCase 문자열 만들기 문제를 풀어보려고 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12951
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Problem
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해 주세요.
[제한 사항]
○ s는 길이 1 이상 200 이하인 문자열입니다.
○ s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
![](https://blog.kakaocdn.net/dn/JZVPu/btsBc1WPyE9/LKglWK6WAKPJxtKe8gFAe0/img.png)
Solution
class Solution {
fun solution(s: String): String {
var answer = ""
var prev:String = s.substring(0, 1)
answer += prev.toUpperCase()
for(i in 1..s.length - 1) {
var str = s.substring(i, i + 1)
if(prev.equals(" ") || i == 0) {
str = str.toUpperCase()
} else {
str = str.toLowerCase()
}
prev = s.substring(i, i + 1)
answer += str
}
return answer
}
}
이번 문제는 for 문을 통해서 문제를 접근해 보았습니다. substring을 사용해서 한 글자씩 자르면서 이전 글자는 prev에 저장하는 방식으로 문제를 풀었습니다.
1. 다른 사람 코드
class Solution {
fun solution(s: String): String {
var answer = s.mapIndexed { index, c -> if(index == 0 || s[index - 1] == ' ') c.toUpperCase().toString() else {
c.toLowerCase().toString()
} }.joinToString("")
return answer
}
}
저의 코드와 다르게 가독성이 좋게 mapIndexed를 활용해서 푼 코드를 가져와봤습니다.
코드 분석
1. 첫 문자와 공백 다음에 오는 문자를 확인하기 위해 mapIndexed로 Index와 char을 둘 다 얻어옵니다.
2. 조건에 따라서 대/소문자로 변환시킵니다.
3. joinToString을 활용해서 마지막 string으로 만들어줍니다.
이렇게 for문을 사용하지 않고 가독성이 좋은 코드입니다. 결국 비슷한 로직으로 이루어져 있지만 좀 더 보기에는 다른 사람의 코드가 좀 더 편한 것 같습니다. 앞으로 이런 식으로 코드를 작성하는 연습도 같이 병행해 봐야겠습니다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
![]() |
![]() |
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 Kotlin (2) | 2023.12.03 |
---|---|
[프로그래머스] 최대공약수와 최소공배수 Kotlin (0) | 2023.12.02 |
[프로그래머스] 직사각형 별찍기 Kotlin (0) | 2023.11.30 |
[프로그래머스] 부족한 금액 계산하기 Kotlin (0) | 2023.11.29 |
[프로그래머스] 최댓값과 최솟값 Kotlin (0) | 2023.11.28 |