1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class JadenCase { public String solution(String s) { String answer=""; String str=s.toLowerCase(); char []ary=str.toCharArray(); answer+=Character.toUpperCase(ary[0]); return getAnswer(answer, ary); } //JadenCase를 만든후에 맨 마지막이 공백문자일 경우에 예외처리 private String getAnswer(String answer, char[] ary) { for (int i = 1; i < ary.length-1; i++) {//맨 마지막이 공백문자일 경우 예외처리 if (ary[i] == ' ') { ary[i + 1] = Character.toUpperCase(ary[i + 1]); } answer += ary[i]; } if(ary[ary.length-1]==' '){//맨 마지막이 공백문자일 경우 맨 뒤에 공백문자 추가 answer+=' '; } else {// 그냥 문자일 경우는 문자만 추가 answer+=ary[ary.length-1]; } return answer; } } | cs |
JadenCase.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import org.junit.Test; import static org.junit.Assert.*; public class JadenCaseTest { JadenCase j= new JadenCase(); @Test public void 테스트결과() { assertEquals("3people Unfollowed Me",j.solution("3people unFollowed me")); assertEquals("For The Last Week",j.solution("for the last week")); assertEquals("For The Last Week ",j.solution("for the last week ")); } } | cs |
JadenCaseTest.java
- 문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
- 제한 조건
s는 길이 1 이상인 문자열입니다.
s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
원래는 공백기준으로 스트링을 잘라서 첫 글자만 대문자로 바꾸는 형식으로 풀다가 아예 방식을 바꿨다. 왜냐면 공백이 여러개가 동시에 나올 수도 있다는 것을 알았기 때문이다(...) 이거 때문에 1시간은 헤멘듯하다. 정규식까지 써서 공백 여러개 나왔을때도 단어를 자르게 만들었는데 문제는 그 단어들을 스트링으로 합칠때 발생했다. 공백이 몇개가 있었는지 카운트가 안되어있었기 때문이다. 그래서 새로운 방식으로 다시 풀었다...
------------------------------------------------------------------------------------------------------------------------------------------
댓글로 피드백이 와서 다시 돌려봤더니 테스트케이스가 추가된 탓인지 불합격이 떴다. 그래서 예외 처리를 다시 해주고 리팩터링까지 완료했다.
'프로그래머스 > JAVA' 카테고리의 다른 글
[정렬] H-Index (0) | 2018.10.05 |
---|---|
[해시] 완주하지 못한 선수 (2) | 2018.10.04 |
[level 2] 숫자의 표현 (0) | 2018.09.26 |
[정렬] K번째수 (0) | 2018.09.21 |
[level 2] N개의 최소공배수 (0) | 2018.09.13 |