StringBuilder 활용
자바에서 문자열을 뒤집는 가장 쉬운 방법을 StringBuilder를 활용하는 것이다. StringBuilder는 다양한 메서드를 지원해 주는데 그중 하나가 문자열을 반대로 변환시켜주는 reverse() 메서드이다.
String str = "Hello World";
String tmp = new StringBuilder(str).reverse().toString();
System.out.println(tmp);
// dlroW olleH
주의할점을 toString 메스드로 String으로 반환시켜야 한다는 것이다.
반복문 사용하기
문자열을 문자 배열로 변환한 후, 배열을 뒤집고 다시 문자열로 변환하는 방법이다.
String original = "Hello, World!";
char[] charArray = original.toCharArray();
String reversed = "";
for (int i = charArray.length - 1; i >= 0; i--) {
reversed += charArray[i];
}
System.out.println(reversed);
단순 문자열 뒤집기는 `StringBuilder `를 사용하는 것이 가장 효율적이며, 기억이 안 난다면 반복문을 이용하여 뒤집는 것도 좋은 방법이 될 수 있다.
문자열의 특정 단어만 뒤집는다면?
영어 알파벳과 특수문자로 구성된 문자열이 주어지고 영어 알바벳만 뒤집는다고 생각해보자.
특수문자는 그 자리 그대로 있고 영문만 반대로 뒤집어야 한다. 이러한 경우 위에서 제시한 두 방법은 활용할 수가 없다.
입력
a#b!GE*T@S
출력
S#T!EG*b@a
여기서 코드 풀이를 생각해 보면 다음과 같다.
1. 문자열을 문자배열로 변환한다.
2. 문자배열을 순회하며 알파벳과 특수문자를 구분할 수 있어야 한다.
3. 알파벳인 경우 교환을 진행할 수 있어야 한다.
- 교환을 진행할 수 있는 방법으로 lt, rt 인덱스를 활용한다.
- 코딩테스트에서 많이 활용되는 방법으로 lt와 rt가 모두 알파벳이면 교환하고 lt++, rt--를 진행한다.
4. 알파벳이 아닌 경우 단순히 lt++, rt-- 시켜준다.
코드 구현
char[] s = str.toCharArray();
int lt = 0, rt = str.length();
while(lt < rt) {
if(!Character.isAlphabetic(s[lt])) lt++;
else if(!Character.isAlphabetic(s[rt])) rt--;
else {
char tmp = s[lt];
s[lt] = s[rt];
s[rt] = tmp;
lt++;
rt--;
}
}
String answer = String.valueOf(s);
반복문을 살펴보면 lt가 rt보다 커질 때까지 while문을 반복 실행한다. 조건절을 살펴보면 앞서 코드흐름에서 설명했듯이 알파벳이 아닌 경우 lt와 rt 값을 단순히 증가 또는 감소시켜준다.
else 절인 경우 둘 다 알파벳을 가리키니 교환을 진행시켜 준다. 그런 다음 lt, rt에 대한 값처리를 해주면 된다.
그런 다음 문자배열을 문자열로 변환시켜 주는 String.valueOf() 메서드를 활용하여 문자열을 리턴한다.
Character.isAlphabetic() 메서드는 문자가 알파벳인지 확인해 준다.
'코딩테스트 > 이론' 카테고리의 다른 글
[JAVA] 문자를 숫자로 변환하기 Char to Int (0) | 2024.11.28 |
---|---|
[JAVA] 정수와 문자열 입력값의 각 자리수 합 구하기 (0) | 2024.11.28 |
[코딩테스트] 문자열 활용 - 문자찾기와 바꾸기 with Java (0) | 2024.08.30 |
[코딩테스트] 문자열 with Java (0) | 2024.08.26 |
[코딩테스트] 동적계획법과 냅색(Knapsack) 문제 (0) | 2023.09.26 |