https://school.programmers.co.kr/learn/courses/30/lessons/12930
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이 흐름
- 문자열의 모든 문자에 대해 반복
- 문자가 공백 문자일 경우
- 그대로 이어 붙이기
- 다음 등장하는 알파벳은 대문자
- 공백 문자가 아닌 경우
- 대 소문자 변환하여 이어 붙이기
- 다음 등장하는 알파벳의 대 소문자는 현재 변환하는 문자와 반대
- 문자가 공백 문자일 경우
- 구성한 문자열 반환
코드 작성
문자열의 각 문자가 공백인지 알파벳인지 구분하고 각 단어의 몇 번째 문자인지에 따라 대문자 혹은 소문자로 변환해야 한다.
1. 문자열의 모든 문자에 대해 반복
다음과 같이 문자열 구성을 위한 StringBuilder 클래스와 문자 순회 루프를 작성한다.
StringBuilder builder = new StringBuilder();
for(char c: s.toCharArray()) {
//c를 적절히 변환하여 builder에 추가
}
return builder.toString();
1.1 문자가 공백일 경우
검사하는 문자가 공백 문자일 경우를 검사해보자. 자바의 Character 클래스에는 문자가 알파벳인지를 검사하는 isAlphabetic() 메서드가 있다. 이를 사용하여 다음과 같이 검사한다.
for(char c: s.toCharArray()) {
//c를 적절히 변환하여 builder에 추가
if(!Character.isAlphabetic(c)) {
//공백 처리
} else {
//알파벳 변환
}
}
1.1.1 그대로 이어 붙이기
공백문자는 별도의 변환 과정 없이 그대로 이어 붙인다.
builder.append(c);
1.1.2 다음 등장하는 알파벳은 대문자
공백 문자가 등장했다면 다음 등장하는 알파벳은 단어의 시작이므로 무조건 대문자로 시작해야 한다. (0부터 시작하기 때문에 대문자 취급) 알파벳이 대문자로 변환되어야 하는지, 소문자로 변환되어야 하는지 나타내는 toUpper 변수를 선언하여 대, 소문자 상태를 가지고 있는다.
boolean toUpper = true;
이제 공백 문자를 만나면 toUpper 변수를 true로 설정해서 다음 만나는 알파벳이 대문자로 변환되게 한다.
if(!Character.isAlphabetic(c)) {
//공백 처리
builder.append(c);
toUpper = true;
} ...
1.2 공백 문자가 아닌 경우
else 문으로 진입한 c는 알파벳이라는 보장이 있으므로 대문자 혹은 소문자로 변환해야 한다.
1.2.1 대, 소문자 변환하여 이어 붙이기
다음과 같이 else 문에 toUpper를 사용하여 문자의 대, 소문자를 변환하고, StringBuilder 객체에 이어 붙인다.그리고 다음 문자의 대,소문자 여부를 변경한다.
for(char c: s.toCharArray()) {
//c를 적절히 변환하여 builder에 추가
if(!Character.isAlphabetic(c)) {
//공백 처리
builder.append(c);
toUpper = true;
} else {
//알파벳 변환
if(toUpper) builder.append(Character.toUpperCase(c));
else builder.append(Character.toLowerCase(c));
}
}
1.2.2 다음 등장하는 알파벳의 대,소문자는 현재 변환하는 문자와 반대
현재 문자를 대문자 혹은 소문자로 변환했으므로, 단어의 다음 문자는 그 반대로 변환되어야 한다. 따라서 다음과 같이 toUpper 변수 값을 반전시켜 준다.
toUpper = !toUpper;
전체 코드
class Solution {
public String solution(String s) {
String answer = "";
StringBuilder builder = new StringBuilder();
boolean toUpper = true;
for(char c: s.toCharArray()) {
//c를 적절히 변환하여 builder에 추가
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;
}
}
return builder.toString();
}
}
'CS > 알고리즘' 카테고리의 다른 글
프로그래머스 - 이진 변환 반복하기 [JAVA] (2) | 2025.04.10 |
---|---|
프로그래머스 - 문자열 압축 [Java] (0) | 2025.03.26 |
프로그래머스 - 시저암호 [Java] (0) | 2025.03.19 |
프로그래머스 - 거리두기 확인하기 [Java, Javascript] (1) | 2025.03.18 |
[MST] (0) | 2024.12.15 |