본문 바로가기

지루한 일상

[프로그래머스] 이상한 문자 만들기(java), 담배 3대를 포함한 개삽질 끝에 해결

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개삽질을 왜 했냐고요?

문자열 끝에 공백이 있을 경우 그 공백들까지 그대로 return을 해줘야합니다.

이걸 몰라서 진짜 왜 테스트케이스 전부 통과가 안되는지 담배 세 대 피면서 생각했다.

소스만 대충 올립니다. 

그래도 주석은 야무지게 달아놓음.

확실히 연습문제용들이 그렇게 힘들이지 않게 알고리즘 초급부터 공부할 수 있어서 좋다. 

public static String solution(String s) {
String answer = "";
//문자열 끝 마지막 문자
String lastChar = Character.toString(s.charAt(s.length()-1));

int blankCnt = 0; //문자열 끝 공백 체크용
boolean flag = false;

if(lastChar.equals(" ")) { //마지막 문자열이 공백일 경우 
flag = true;

for(int i=s.length()-1; i>=0; i--) { //문자열 끝에서부터 공백이 몇개인지 체크
String c = Character.toString(s.charAt(i));
if(c.equals(" ")) {
blankCnt++;
}else {
break; //공백이 아닌 문자를 만났을 때 반복문 탈출
}
}
}

String[] str = s.split(" "); //공백 기준으로 문자열 분리

int cnt = 0;

for(String ss : str) {
String word = "";
String[] strTmp = ss.split("");

for(int i=0; i<strTmp.length; i++) { 
String tmp = strTmp[i];

if((i+1)%2 == 1) { //짝수일 경우 대문자 변환
strTmp[i] = tmp.toUpperCase();
}else { //홀수일 경우 대문자 변환
strTmp[i] = tmp.toLowerCase();
}
}
for(String sss : strTmp) {
word += sss;
}

str[cnt] = word; //기존 배열에 대소문자 변환한 문자열 치환
cnt++;
}

for(int i=0; i<str.length; i++) { //answer변수에 값 넣기
if(i == str.length-1) { //마지막 문자열일 경우, 공백 없이 마무리
answer += str[i];
}else {
answer += str[i] + " ";
}
}

if(flag == true) { //문자열 끝에 공백이 있을 경우, 공백 숫자만큼 answer 끝에 공백 추가
for(int i=0; i<blankCnt; i++) {
answer += " ";
}
}
return answer;

}