📌 문제 설명
소문자로 된 한 개의 문자열이 입력되면 중복된 문자를 제거하고, 중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지하는 프로그램을 작성하세요.
- 문자열의 길이는 최대 100입니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 소문자로 된 문자열 (최대 길이 100)
🔹 출력
- 중복 문자가 제거된 문자열 출력
🔸 예제 입력 1
ksekkset
🔸 예제 출력 1
kset
💡 해결 방법
- 문자열을 순회하며 중복된 문자가 처음 등장한 위치인지 확인
- indexOf(x) == i를 활용하여 해당 문자가 처음 등장한 위치인지 검사
- 첫 등장하는 문자만 최종 문자열에 추가
- 문자열의 순서를 유지해야 하므로 Set 자료구조 대신 문자열을 직접 순회하는 방식 사용
💻 코드 구현 (Java)
package partString;
import java.util.*;
// 중복 문자 제거
public class Problem6 {
public String solution(String str) {
String answer = "";
for (int i = 0; i < str.length(); i++) {
char x = str.charAt(i);
if (str.indexOf(x) == i) { // 해당 문자가 처음 등장한 위치인지 확인
answer += x;
}
}
return answer;
}
public static void main(String[] args) {
Problem6 T = new Problem6();
Scanner kb = new Scanner(System.in);
String s = kb.next();
System.out.print(T.solution(s));
kb.close();
}
}
📖 코드 설명
1️⃣ indexOf()를 활용한 중복 검사
if (str.indexOf(x) == i)
- str.indexOf(x) → 해당 문자가 처음 등장하는 위치 반환
- i → 현재 검사 중인 문자 위치
- ✅ 현재 위치(i)와 indexOf(x)가 같다면 처음 등장한 문자이므로 추가
2️⃣ 결과 문자열에 추가
answer += x;
- ✅ 처음 등장한 문자만 결과 문자열에 추가
- 기존 문자열의 순서를 유지하면서 중복 제거 가능
3️⃣ contains()를 활용한 방법
for (char x : str.toCharArray()) {
if (!answer.contains(String.valueOf(x))) {
answer += x;
}
}
- ✅ contains()를 사용하여 answer에 해당 문자가 이미 있는지 확인
⏳ 시간 복잡도 분석
- O(n²) (n: 문자열 길이)
- indexOf(x)는 최악의 경우 O(n)이므로, 전체 루프와 함께 O(n²) 발생 가능
- 입력 크기가 작기 때문에 현실적으로는 큰 문제 없음
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 1. 문자열 - 8. 유효한 팰린드롬 (0) | 2025.03.18 |
|---|---|
| 섹션 1. 문자열 - 7. 회문 문자열 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 5. 특정 문자 뒤집기 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 4. 단어 뒤집기 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 3. 문장 속 단어 (1) | 2025.03.18 |