문제풀이 흐름

  1. 문자열의 모든 문자에 대해 반복
    1. 문자가 공백 문자일 경우
      1. 그대로 이어 붙이기
      2. 다음 등장하는 알파벳은 대문자
    2. 공백 문자가 아닌 경우
      1. 대 소문자 변환하여 이어 붙이기
      2. 다음 등장하는 알파벳의 대 소문자는 현재 반환하는 문자와 반대
  2. 구성한 문자열 변환

코드 작성

1. 문자열의 모든 문자에 대해 반복

StringBuilder builder = new StringBuilder();

for (char c : s.toCharArray()){
		// c를 적절히 변환하여 builder에 추가
}

return builder.toString();

1-A. 문자가 공백 문자일 경우

for (char c : s.toCharArray()){
		if (!Character.isAlphabetic(c)){
			// 공백 처리
		} else {
			// 알파벳 변환
		}
}

1-A-i. 그대로 이어붙이기

for (char c : s.toCharArray()){
		if (!Character.isAlphabetic(c)){
			builder.append(c);
		} else {
			// 알파벳 변환
		}
}

1-A-ii. 다음 등장하는 알파벳은 대문자

공백 문자가 등장했다면 다음에 등장하는 알파벳은 단어의 시작이므로 무조건 대문자로 변환되어야 합니다. toUpper 변수를 선언하여 대 소문자 상태를 갖고 있겠습니다.

StringBuilder builder = new StringBuilder();
boolean toUpper = true;

for (char c : s.toCharArray()){
		if (!Character.isAlphabetic(c)){
			builder.append(c);
			toUpper = true;
		} else {
			// 알파벳 변환
		}
}

1-B. 공백 문자가 아닌 경우

1-B-i. 대 소문자 변환하여 이어 붙이기

if (!Character.isAlphabetic(c)){
			builder.append(c);
			toUpper = true;
		} else {
			if (toUpper) {
					builder.append(Character.toUpperCase(c));
			} else {
					builder.append(Character.toLowerCase(c));
			}
		}
}

1-B-ii. 다음 등장하는 알파벳의 대 소문자는 현재 반환하는 문자와 반대

if (!Character.isAlphabetic(c)){
			builder.append(c);
			toUpper = true;
		} else {
			if (toUpper) {
					builder.append(Character.toUpperCase(c));
			} else {
					builder.append(Character.toLowerCase(c));
			}
			toUpper = !toUpper;
		}
}

2. 구성한 문자열 반환