반응형
출처 : programmers.co.kr/learn/courses/30/lessons/12951
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
입출력 예
s return
3people unFollowed me | 3people Unfollowed Me |
for the last week | For The Last Week |
풀이 & 사용 메소드
- 한 문장내에서 첫 글자는 대문자로, 나머지는 소문자로 바꿔주기
- toUpperCase, toLowerCase. split
- 1. 공백을 기준으로 분리하지말고, 공백도 문자로 봤어야 했다.
- 2. 전 문자가 공백이라면, 그 다음첫 글자는 대문자로 바꿔줘야 한다.
주의 할점
- 공백이 여러 개 올 수 있다는 것을 생각하지 못하니, 런타임 에러가 계속 발생했다.
- 입력 문자열 가장 끝에 공백이 올 수도 있다는 것도 생각했어야 했다. ㅠㅠㅠ 시간 매우 소비함.
실패한 코드
public static String failsolution (String s ) {
String answer ="" ;
StringBuilder sb = new StringBuilder();
// 1. s를 공백을 단위로 쪼개자.
String[] JadenCase = s.split(" ");
// 2. 각 배열의 첫 글자를 대문자로 바꾸자. + 나머지는 소문자로
for( int i=0; i<JadenCase.length; i++) {
sb.append(Character.toUpperCase(JadenCase[i].charAt(0)));
for( int j=1; j<JadenCase[i].length(); j++) {
sb.append(Character.toLowerCase(JadenCase[i].charAt(j)));
}
// 3. StringBuilder에 더해주고
if ( i == JadenCase.length-1) break ;
sb.append(' '); // 공백 넣어주고
}
// 4. toString 메소드 이용해보자
answer = sb.toString();
return answer;
}
성공한 코드
public static String solution (String s ) {
String answer ="" ;
String[] arr = s.toLowerCase().split(""); // 공백도 문자취급해주기
StringBuilder sb = new StringBuilder();
boolean blank = true; // 첫 글자는 무조건 대문자니까.
for ( String str : arr) {
answer += blank? str.toUpperCase() : str;
blank = str.equals(" ")? true : false;
}
return answer;
}
추가적으로 참고한 코드
public class Solution {
public String solution(String s) {
StringBuilder answer = new StringBuilder(); // 문자열을 더하기 때문에 StringBuilder 사용
String firstStr = s.charAt(0) + "";
answer.append(firstStr.toUpperCase()); // 첫 글자는 무조건 대문자
for (int i = 1; i < s.length(); i++) {
String now = s.charAt(i) + "";
if (now.equals(' ')) { // 공백이면 그대로 넘어가기
answer.append(" ");
} else if (s.charAt(i - 1) == ' ') { // 전 문자열이 공백이면
answer.append(now.toUpperCase()); // 대문자
} else {
answer.append(now.toLowerCase()); // 소문자
}
}
return answer.toString();
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 위장 [Java] (0) | 2020.10.22 |
---|---|
[프로그래머스] 네트워크 [Java] (0) | 2020.10.22 |
[프로그래머스] 전화번호 목록 [JAVA] (1) | 2020.10.21 |
[프로그래머스] 이상한 문자 [Java] (0) | 2020.10.21 |
[프로그래머스] 시저 암호 [JAVA] (0) | 2020.10.21 |