
이 문제는 대충 읽고 풀면 나처럼 틀릴 수 있다.
나는 처음 풀 때 문제를 대충 읽고 홀수 인덱스는 소문자 짝수 인덱스는 대문자로 하면 되는구나 하고 로직을 만들었다.
class Solution {
public String solution(String s) {
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (i % 2 == 0) {
arr[i] = Character.toUpperCase(arr[i]);
} else {
arr[i] = Character.toLowerCase(arr[i]);
}
}
return new String(arr);
}
}
위에 코드는 내가 처음 잘못 푼 코드다.
char 배열을 만들고 반복문을 통해 홀수 인덱스는 소문자로 짝수 인덱스는 대문자로 변경했고 마지막 char 배열을 문제의 요구사항에 맞게 String 형태로 return 했다.
이렇게 문제를 제출하니 꽤 많은 테스트 케이스를 실패했다.
그래서 내가 문제를 읽으면서 놓친 조건이 있나 다시 한 번 문제를 읽어봤다.
대충 읽고 넘어갔던 빈 공백에 대한 조건을 신경쓰지 않았던 것이다.
이 문제는 공백 다음에 나오는 문자열에 대해 다시 홀수, 짝수 인덱스를 고려해야하는 문제였던 것이다.
`.split(" ")` 을 사용하면 공백이 연속으로 붙어있을 때 문제가 생길 수 있다. 따라서 이 문제는 다르게 접근해야한다고 판단했다.
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
int idx = 0;
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if (c == ' ') {
sb.append(c);
idx = 0;
} else {
if (idx % 2 == 0) {
sb.append(Character.toUpperCase(c));
} else {
sb.append(Character.toLowerCase(c));
}
idx++;
}
}
return sb.toString();
}
}
이건 최종 정답에 해당하는 로직이다.
sb와 idx라는 변수를 선언하고 반복문을 통해 공백일 경우 sb에 넣고 idx를 초기화 시킨다.
공백이 아닐 경우 idx는 초기화된 상태이기 때문에 짝수인덱스부터 시작하게 된다. (0도 짝수에 포함)
따라서 공백 이후 혹은 첫번째 문자열은 무조건 대문자가 되고 idx를 증가시킨다.
그 다음은 소문자 다시 대문자 .... 이렇게 흘러가게 된다.
결론적으로 우리가 원하는 알고리즘을 만들 수 있으며 최종 답을 반환할 수 있다.
'PS' 카테고리의 다른 글
| [프로그래머스] 푸드 파이트 대회 (0) | 2026.07.05 |
|---|---|
| [프로그래머스] 시저 암호 (0) | 2026.06.30 |
| [프로그래머스] 최대공약수와 최소공배수 (0) | 2026.06.23 |
| [프로그래머스] 두 개 뽑아서 더하기 (1) | 2026.06.12 |
| [프로그래머스] 원하는 문자열 찾기 (0) | 2026.06.02 |