본문 바로가기
공부/코딩테스트

프로그래머스/C#/Lv.2 - JadenCase 문자열 만들기

by 잰쟁 2024. 6. 24.
728x90

 

 

문제 설명

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

 

 

제한 조건

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

 

입출력 예

 

 

풀이

 

시행착오 1)

using System.Linq;
using System;

public class Solution {
    public string solution(string s) {
        string answer = "";
        s = s.ToLower();
        int a = s.IndexOf(" ")+1;  //공백 다음 문자 위치
        string b = s.Substring(a,1).ToUpper();
        s = s.Remove(a,1).Insert(a,b);
        answer = s;
        return answer;
    }
}

 

: 처음엔 공백의 인덱스를 찾은 후 그 다음 문자를 Substring()과 ToUpper()를 사용하여 대문자로 만든 후,

Remove()와 Insert()를 사용해 바꿔주려고 하였다.

 

그러나

 

: 처음 공백이 나온 뒤의 문자만 대문자로 바뀌었다. 당연하다. 왜나면...

=> IndexOf 함수는 맨 처음 발견되는 인덱스만 보고하기 때문이다!

 

: 이 방법을 사용하여 모든 공백 뒤의 문자를 바뀌게 하려면 어떻게 해야하나 고민을 해봤지만 시간만 잡아먹었다ㅜㅜ

그래서 다른 방법을 생각해보았다!!

 

 

 

시행착오 2)

using System;

public class Solution {
    public string solution(string s) {
        string answer = "";
        s = s.ToLower();
        //..string -> char
        char[] arr = s.ToCharArray();
        
        for(int i = 0; i<arr.Length; i++)
        {
            //..맨 처음 문자 -> 대문자
            arr[0] = Char.ToUpper(arr[0]);
            if(arr[i] == ' ')
            {
                arr[i+1] = Char.ToUpper(arr[i+1]);
            }
            answer += arr[i].ToString();
        }
        return answer;
    }
}

 

: string 타입의 s를 char[ ] 배열로 바꿔준 후,

for문을 돌려 맨 처음 문자는 대문자로 또 공백이면 그 다음 배열값을 대문자로 바꿔주고

char -> string 형식으로 다시 바꿔주고 answer에 더해주었다.

 

그러나..

 

 

 

으악 ... 8번 테스트만 통과가 안 되었다ㅜㅡㅜ

아무리 생각해도 모르겠어서 질문하기를 뒤져봤는데

 

아하...!! 문자열 맨 마지막이 공백인 경우에 런타임 에러가 생긴다고 한다!!

내가 풀이한 방식이 공백 값 뒤의 인덱스 값을 대문자로 변경하는 방식이기때문에 문제가 생긴것!!

 

그래서 맨 마지막 배열값이 공백이 아닐결우 대문자로 만든다 라는 조건을 추가해주었다!!

 

 

최종 풀이 )

using System;

public class Solution {
    public string solution(string s) {
        string answer = "";
        s = s.ToLower();
        //..string -> char
        char[] arr = s.ToCharArray();
        
        for(int i = 0; i<arr.Length; i++)
        {
            arr[0] = Char.ToUpper(arr[0]);
            //..값이 공백이면서 i가 맨마지막 인덱스 미만일 경우
            if(arr[i] == ' ' && i<arr.Length-1)
            {
                arr[i+1] = Char.ToUpper(arr[i+1]);
            }
            answer += arr[i].ToString();
        }
        return answer;
    }
}

 

 

휴우.. 이번에도 푸는데 좀 오래 걸렸다ㅜㅜ

아잣잣!