반응형
https://programmers.co.kr/learn/courses/30/lessons/12951
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
입출력 예
sreturn
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
class Solution {
public String solution(String s) {
String[] arr = s.split(" ");
StringBuffer sb = new StringBuffer();
for(int i=0; i<arr.length; i++) {
sb.append(arr[i].substring(0, 1).toUpperCase());
sb.append(arr[i].substring(1).toLowerCase());
if(i != arr.length-1) sb.append(" ");
}
return sb.toString();
}
}
처음에 이렇게 짰지만 테스트 케이스들을 거의 통과하지 못했다. 그래서 질문하기 내용들을 보니 공백이 하나가 아닐 수 있다는 글이 있었고 그래서 split으로 자르지 않고 문자열 통채로 반복문을 돌려야 겠다고 생각했다.
그래서 수정한 코드가 아래 코드이다.
class Solution {
public String solution(String s) {
String answer = s.substring(0,1).toUpperCase();
int temp=0;
for(int i=1; i<s.length(); i++) {
if(temp == -1 && s.charAt(i) != ' ') answer += Character.toUpperCase(s.charAt(i));
else answer += Character.toLowerCase(s.charAt(i));
if(s.charAt(i) == ' ') {
temp = -1;
} else {
temp = 0;
}
}
return answer;
}
}
일단 문자열의 시작은 무조건 대문자로 들어가게 되므로 answer를 s의 첫글자로 초기화 해주었다.
그리고 temp변수를 사용했는데 temp는 그 전 문자가 공백이었는지 문자였는지 검사하기 위해 사용했다.
boolean을 사용했어도 됬는데 아무 생각없이 int로 0, -1을 사용한것 같다.
그래서 그 전 문자가 공백 (temp = -1) 이었는데 다음에 문자가 오게 되면 toUpperCase 메소드를 사용하여 대문자를 더해주고 그 외에는 공백이 연속으로 오던지 문자가 연속으로 있는 경우이거나 문자에서 공백으로 바뀌는 경우로 toLowerCase 메소드를 사용하여 소문자로 바꿔서 더해주었다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[java 자바] 프로그래머스: 오픈채팅방 (0) | 2021.08.17 |
---|---|
[java 자바] 프로그래머스: 모의고사 (0) | 2021.08.12 |
[java 자바] 프로그래머스:약수의 개수와 덧셈 (0) | 2021.08.09 |
[java 자바] 프로그래머스:음양 더하기 (0) | 2021.08.08 |
[java 자바] 프로그래머스:로또의 최고 순위와 최저 순위 (0) | 2021.08.07 |