📌 문제 설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
- 문자열의 길이는 최대 100입니다.
- 영어 알파벳과 특수문자가 포함될 수 있습니다.
- 특수문자는 원래 위치를 유지해야 합니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 길이가 100을 넘지 않는 문자열 (영어 알파벳 + 특수문자 포함)
🔹 출력
- 첫 번째 줄: 알파벳만 뒤집힌 문자열 출력
🔸 예제 입력 1
a#b!GE*T@S
🔸 예제 출력 1
S#T!EG*b@a
💡 해결 방법
- 투 포인터(two-pointer) 알고리즘 활용
- lt (왼쪽)과 rt (오른쪽)에서 시작
- 두 포인터가 알파벳을 찾으면 위치를 교환
- 특수문자는 그대로 유지
- 문자열을 문자 배열로 변환 (toCharArray())
- 문자열을 직접 수정할 수 있도록 배열로 변환
- Character.isAlphabetic()로 알파벳 여부 확인
- 알파벳이 아닌 경우 포인터 이동
💻 코드 구현 (Java)
package partString;
import java.util.*;
public class Problem5 {
public String solution(String str) {
char[] s = str.toCharArray();
int lt = 0, rt = str.length() - 1;
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--;
}
}
return String.valueOf(s);
}
public static void main(String[] args) {
Problem5 T = new Problem5();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
kb.close();
}
}
📖 코드 설명
1️⃣ toCharArray()를 사용하여 문자열을 배열로 변환
char[] s = str.toCharArray();
- 문자열을 직접 수정할 수 있도록 배열로 변환
2️⃣ 투 포인터 알고리즘을 활용하여 문자 교환
int lt = 0, rt = str.length() - 1;
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--;
}
}
- lt는 왼쪽에서 오른쪽으로 이동
- rt는 오른쪽에서 왼쪽으로 이동
- 알파벳이 아닌 경우 건너뛰고, 알파벳이면 교환
- ✅ 특수문자는 그대로 유지됨
3️⃣ 문자열로 변환 후 반환
return String.valueOf(s);
- 배열을 다시 문자열로 변환하여 반환
⏳ 시간 복잡도 분석
- O(n) (n: 문자열 길이)
- 문자열을 한 번만 순회하면서 문자를 교환하므로 최적의 시간 복잡도
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 1. 문자열 - 7. 회문 문자열 (0) | 2025.03.18 |
|---|---|
| 섹션 1. 문자열 - 6. 중복 문자 제거 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 4. 단어 뒤집기 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 3. 문장 속 단어 (1) | 2025.03.18 |
| 섹션 1. 문자열 - 2. 대소문자 변환 (0) | 2025.03.18 |