본문 바로가기
프로그래머스 Algorithm

[프로그래머스] JadenCase 문자열 만들기 Kotlin

by Echung 2023. 12. 1.

안녕하세요. 이번에는 프로그래머스 JadenCase 문자열 만들기 문제를 풀어보려고 합니다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/12951

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Problem

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)

문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해 주세요.

 

[제한 사항]

s는 길이 1 이상 200 이하인 문자열입니다.

 s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.

  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.
사진 1. 입출력 예

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. 다른 사람 코드
반응형