문제 설명
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;
}
}
휴우.. 이번에도 푸는데 좀 오래 걸렸다ㅜㅜ
아잣잣!
'공부 > 코딩테스트' 카테고리의 다른 글
프로그래머스/C#/Lv.2 - 다음 큰 숫자 (0) | 2024.06.25 |
---|---|
프로그래머스/C#/Lv.2 - 이진 변환 반복하기 (0) | 2024.06.25 |
프로그래머스/C#/Lv.2 - 최솟값 만들기 (0) | 2024.06.21 |
프로그래머스/C#/Lv.2 - 올바른 괄호 (0) | 2024.06.19 |
프로그래머스/C#/Lv.2 - 최댓값과 최솟값 (0) | 2024.06.18 |