https://programmers.co.kr/learn/courses/30/lessons/12930#
풀이
처음에는 공백을 기준으로 문자열을 나누기 위해 split(" ")을 사용했는데, 테스트 점수가 68점이 나왔다.
틀린 점을 모르겠어서 찾아보니, split(" ")은 후행 공백을 처리해주지 않는다는 점을 알게 되었다.
만약 " hello "라는 문자열을 split(" ")으로 나눈다면
{ "", "", "hello", "", ""] 가 아니라 {"", "", "hello"]로 처리한다는 것이다.
해결법! index 라는 변수를 새롭게 만들어주고 문자열s가 아닌, index를 기준으로 짝수홀수 인덱스를 판단한다.
단어(공백 기준)별로 인덱스를 판단해야하기 때문에, 공백을 만나면 index=0으로 초기화한다.
class Solution {
public String solution(String s) {
char[] c = s.toCharArray();
int index = 0;
for(int i=0; i<c.length;i++){
if(c[i]==' '){index=0;}
else {
if(index%2==0){
c[i]=Character.toUpperCase(c[i]);
}
else{
c[i]=Character.toLowerCase(c[i]);
}
index++;
}
}
return String.valueOf(c);
}
}
+
다른사람풀이.
만약 split()함수를 쓰고 싶다면 split("")를 이용하면 후행 공백도 다 처리가 된다.
class Solution {
public String solution(String s) {
String answer = "";
int cnt = 0;
String[] array = s.split("");
for(String ss : array) {
cnt = ss.contains(" ") ? 0 : cnt + 1;
answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase();
}
return answer;
}
}
+
이건 수정 전 68점짜리 코드...^^
class Solution {
public String solution(String s) {
// 공백을 기준으로 문자열 자르기
String[] answer = s.split(" ");
StringBuilder sb = new StringBuilder();
for(int i=0;i<answer.length;i++){
System.out.println(answer[i]);
sb.append(charTo(answer[i]));
if(i!=answer.length-1)
sb.append(" ");
}
return sb.toString();
}
// 대소문자 변환함수
String charTo(String s){
char[] c = s.toCharArray();
for(int i=0;i<s.length()-1;i=i+2){
c[i]=Character.toUpperCase(c[i]);
c[i+1]=Character.toLowerCase(c[i+1]);
}
if(s.length()%2 !=0){
c[s.length()-1]=Character.toUpperCase(c[s.length()-1]);
}
return String.valueOf(c);
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 콜라츠 추측 (0) | 2022.02.07 |
---|---|
[Java] 프로그래머스 : 3진법 뒤집기 (0) | 2022.02.07 |
[Java] 프로그래머스 : 문자열 내 마음대로 정렬하기 (0) | 2022.02.07 |
[Java] 프로그래머스 : 문자열 내림차순으로 배치하기 (feat. String <-> char[]) (0) | 2022.01.31 |
[Java] 프로그래머스 : 서울에서 김서방 찾기 (0) | 2022.01.31 |