728x90
반응형
SMALL
📌 문제 정보
- 출처: 문제 링크
- 난이도: ⭐
- 문제 유형: 문자열
- 사용 언어: Java
🔍 문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
💡 풀이 노트
if(c == ' ') i = -1;
- 단어가 끝났다는 뜻이므로, 다음 글자부터는 인덱스를 0부터 다시 시작
- 아래에서 `i++`이 바로 실행되니까, `i = -1`을 줘야 그 다음 문자가 0번째 문자로 처리!
if(i%2 == 0 ) sb.append(Character.toUpperCase(c));
else sb.append(Character.toLowerCase(c));
- 짝수 번째(`0, 2, 4...`) → `Character.toUpperCase(c)`
- 홀수 번째(`1, 3, 5...`) → `Character.toLowerCase(c)`
🚀 코드 (Java)
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
int i = 0;
for(char c : s.toCharArray()){
if(c == ' ')
i = -1;
if(i%2 == 0 ) sb.append(Character.toUpperCase(c));
else sb.append(Character.toLowerCase(c));
i++;
}
return sb.toString();
}
}
🖥 실행 결과
입력 & 출력
s return
"try hello world" "TrY HeLlO WoRlD"
🔄 추가 정리
1. StringBuilder를 사용하는 이유
문자열을 반복해서 더할 때는 `+` 연산보다 `StringBuilder`를 사용하는 것이 훨씬 효율적
String result = "";
for (...) {
result += someChar; // ❌ String은 immutable → 매번 새 객체 생성됨
}
위 코드는 문자열이 바뀔 때마다 새로운 String 객체가 생성되기 때문에, 반복 횟수가 많으면 성능이 급격히 나빠짐
→ 개선하기
StringBuilder sb = new StringBuilder();
sb.append(someChar); // ✅ 내부 버퍼에 이어붙이기 → 성능 좋음
2. 자바의 대소문자 변환 관련 메서드
✅ CHAR
`Character.toUpperCase(char ch)`
- 문자 하나(char)를 대문자로 변환
- 예: `'a'` → `'A'`
`Character.toLowerCase(char ch)`
- 문자 하나(char)를 소문자로 변환
- 예: `'Z'` → `'z'`
✅ String
`String.toUpperCase()`
- 문자열 전체를 대문자로 변환
- 예: `"hello"` → `"HELLO"`
`String.toLowerCase()`
- 문자열 전체를 소문자로 변환
- 예: `"HeLLo"` → `"hello"`
| 대상 | 대문자 변환 | 소문자 변환 |
| `char` | `Character.toUpperCase(c)` | `Character.toLowerCase(c)` |
| `String` | `str.toUpperCase()` | `str.toLowerCase()` |
📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest
728x90
반응형
LIST