Coding Test/Algorithm

Programmers] 이상한 문자 만들기

littlezero48 2022. 11. 18. 19:13

 

  • 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

[제한사항]

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

[입출력 예] 

 

 


추측) 

공백으로 단어별로 나누어서 단어 개수를 가져와 전체 그 수만큼 for문을 돌리고 또 그 단어의 길이 만큼 for문을 돌려 인덱스 0부터 시작해 짝수는 대문자, 홀수는 소문자로 출력하면 될거 같다. 공백은 대문자화나 소문자화에 영향을 안받을거 같다. 

 

소스코드)  - 성공 코드

String answer = "";
int cnt = 0;
String[] s_arr = s.split("");

for (int i=0; i<s_arr.length; i++){
    if(s_arr[i].equals(" ")){
        cnt = 0;
        answer += " ";
    } else {
        answer += (cnt%2==0) ? s_arr[i].toUpperCase() : s_arr[i].toLowerCase();
        cnt++;
    }
}
return answer;

소스코드) - 시도했지만 실패한 코드 

더보기
String answer = "";
String[] s_arr = s.split(" ");

for(int i=0; i<s_arr.length; i++){
    System.out.println(s_arr[i]);
}

for (int i=0; i<s_arr.length; i++){
    for (int k=0; k<s_arr[i].length(); k++){
        String a = s_arr[i].substring(k,k+1);
        answer += (k % 2 == 0) ? a.toUpperCase() : a.toLowerCase();
    }
    answer += " ";
}

return answer.trim();

 

 

 

리뷰) 

생각한대로 코드를 짰는데 예시에서는 성공했지만 계속 예외가 떴다. 예외를 알지 못하는 상태로 계속 반복되어서 다른분이 푸신걸 참조해 흐름을 대략 파악하고 다시 코드를 짜봤다. (며칠후에 잊혀질 쯤 꼭 다시 해볼 것)

빈칸으로 단어를 나누지 않고 모든 스트링을 다 나누어 배열로 나누고 for문을 돌린다. 처음부터 돌릴때 처음이 공백이 아니면 단어의 시작이므로 count를 0으로 하여 0부터 시작해 짝수는 대문자, 홀수는 소문자로 출력할 수 있게 한다. 출력을 하면 count를 하나더 올려 다음으로 넘어간다. 이런식으로 단어하나를 다 출력하고 공백을 만나면 count를 초기화시킨다. 그리고 다시만난 문자를 시작으로 다시 이렇게 반복하면 성공한다.

 

아직도 첫번째 시도 했던 방법이 왜 안됬는지 모르겠다. 이건 기술매니저님께 한번 물어봐야겠다. 

: 텍스트로 입력값으로 들어오는 텍스트에도 뒤에 공백이 그대로 들어오는 경우도 있을건데, 그걸 다 잘라버리는 경우가 생겨서 그런거 같다.