아무고토 몰라효

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

Coding Test

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

Always Newbie 2025. 8. 4. 12:41
반응형

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

Example 1:
| s | return |
| --- | --- |
| "3people unFollowed me" | "3people Unfollowed Me" |

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

Constraints:

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.

고민

단순하게 공백 문자로만 구분지어 처리하면 될것같다고 생각하는 찰나, 공백문자가 연속해서 나올 수 있습니다. 에서 구분지면 안되겠구나 싶었다.
하지만, 단어의 첫번째 글짜를 확인하기 위해선 공백문자가 필히 조건이 될것이다.
그래서 내가 고민한 방법은

  1. 거꾸로 탐색한다.
  2. 공백 문자가 앞에 있다면 대문자로 변경한다.
  3. 그 외는 다 소문자로 변경한다.

해당 방법을 가지고 풀어볼 것이다.

해결

class Solution {
    fun solution(s: String): String {        
        val sb = StringBuilder()
        var i = s.length - 1
        while (i >= 0) {
            if (i != 0 && s[i - 1] == ' ' || i == 0) {
                val change = s[i].uppercase()
                sb.append(change)
            } else {
                 val change = s[i].lowercase()
                sb.append(change)
            }
            i--
        }
        return sb.reversed().toString()
    }
}

반복문을 돌며 거꾸로 탐색하도록 하였다. IndexOutOfBoundsException가 생길 수 있으니 && 조건으로 앞에 있는 요소가 공백문자인지 아닌지 확인하고, 문자열의 제일 첫번째 글짜는 무조건 대문자로 해야하기때문에 ||조건으로 처리했다.
그 외의 요소들은 다 소문자로 변경하여 append 처리를 했다.
그리고 반복문 마지막에 감소식으로 인덱스를 처리했다.

결과

후기

생각해보니 맨 처음부터 모든 요소들을 소문자로 변경하고 해도 됫을 것 같다.

반응형

'Coding Test' 카테고리의 다른 글

[프로그래머스] 이진 변환 반복하기  (0) 2025.08.04
[LeetCode] Add Strings  (2) 2025.08.04
[LeetCode] Is Subsequence  (1) 2025.07.18
[LeetCode] Find the Difference  (1) 2025.07.15
[LeetCode] Reverse String  (3) 2025.07.15
Comments