https://school.programmers.co.kr/learn/courses/30/lessons/12930
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
각 단어는 하나 이상의 공백문자로 구분되어 있습니다. - 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한사항
입출력 예 설명
백준에 비해 프로그래머스가 테스트케이스 통과하기 더 어려운 것 같다.
class Solution {
public String solution(String s) {
String answer = "";
String space = "";
int cnt = 0;
for(int i = 0; i < s.length(); i++) {
cnt++;
if(s.charAt(i) == ' ') {
space += " ";
cnt = 0;
}
else if(cnt % 2 == 1) {
answer += space + ((s.charAt(i) + "").toUpperCase());
space = "";
} else {
answer += space + ((s.charAt(i) + "").toLowerCase());
space = "";
}
}
return answer;
}
}
위에 작성한 코드를 쓰기전에 홀수인 경우에만 ASCII로 대문자 처리를 해주었는데도 모든 테스트케이스가 실패해서 팀원에게 도움을 요청했더니 대문자/소문자 각각 처리해주어야 한다고 해서 toLowerCase/toUpperCase로 대소문자 처리를 해준 코드이다.
그러나 위 코드도 테스트케이스를 전부 성공하지 못했는데 그 이유가 단어가 없는 경우에는 띄어쓰기(String space
)를 해주지 않도록 구현을 했기 때문인 것 같았다.
테스트케이스까지 추가해줬었는데 결국 대소문자 때문이었다.
toLowerCase/toUpperCase 처리해준 이후에 5분도 안돼서 통과가 됐지만 이 부분이 문제가 될 지는 상상도 못했다...
class Solution {
public String solution(String s) {
String answer = "";
int cnt = 0;
for(int i = 0; i < s.length(); i++) {
cnt++;
if(s.charAt(i) == ' ') {
answer += " ";
cnt = 0;
}
else if(cnt % 2 == 1) {
answer += (s.charAt(i) + "").toUpperCase();
} else {
answer += (s.charAt(i) + "").toLowerCase();
}
}
return answer;
}
}