728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/12951
* 프로그래머스 - Level2 - (자바)JadenCase
- 온갖 문자열 다루기 / toUpperCase() / toLowerCase()
SubString() / StringBuilder() / replace()
< 로직 >
* 처음에는 StringTokenizer를 이용해서 공백을 기준으로 잘라낸 다음에 문자열 처리를 하면 된다고 생각을 했다.
* 하지만 문제는 치사했고....
* 입출력 예시처럼 예쁜 케이스는 거의 없다시피 한 것 같다.
* 앞 뒤로 공백이 들어간 경우
* 중간에 연속된 공백이 들어간 경우
* 모두 다 남겨서 아래와 같은 형식으로 마지막에 다 출력 해 주어야한다.
* StringTokenizer는 공백을 싸그리 날려버리기 때문에
* 일반적인 String의 split() 함수를 이용했다.
* 그럼에도 문자열의 마지막 공백은 다 날아가기 때문에 추가적인 공백 추가가 필요하다.
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
String[] strArray = s.split(" "); // " " 공백을 기준으로 split
for(int i = 0; i < strArray.length; i++) {
String tmp = strArray[i];
if(!tmp.equals("")) { // 해당 문자열이 공백이 아니라면
if('a' <= tmp.charAt(0) && tmp.charAt(0) <= 'z' || // 소문자 - 대문자인 경우
'A' <= tmp.charAt(0) && tmp.charAt(0) <= 'Z') {
String first = tmp.substring(0,1).toUpperCase();
String remain = tmp.substring(1, tmp.length()).toLowerCase();
sb.append(first + remain);
}else { // 숫자인 경우
sb.append(tmp.toLowerCase());
}
sb.append(" "); // 공백 하나 추가
} else { // 공백이면 공백 그대로 출력
sb.append(" ");
}
}
sb.replace(sb.length()-1, sb.length(), ""); // 문자로 끝이 났다면 공백 하나가 있다. 제거
// 마지막에 공백인 경우도 추가해 주어야 한다.
for(int i = s.length()-1; i >= 0; i--) {
if(s.charAt(i) == ' ') {
sb.append(s.charAt(i));
} else break;
}
String answer = sb.toString();
return answer;
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 캐시.java (0) | 2021.01.27 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 뉴스클러스터링.java (0) | 2021.01.27 |
[ 알고리즘 ] 코딩 - Programmers - 전화번호목록.java (2) | 2021.01.23 |
[ 알고리즘 ] 코딩 - Programmers - 행렬의 곱셈.java (1) | 2021.01.23 |
[ 알고리즘 ] 코딩 - Programmers - 소수찾기.java (0) | 2021.01.22 |