🔹 문제 설명
주어진 문자열 my_string에서 중복된 문자를 제거하고,
처음 등장한 문자만 남긴 문자열을 만들어야 해요.
🔸 제한사항
- 문자열 길이: 1 ~ 110
- 대문자, 소문자, 공백 모두 허용
- 대소문자 구분 (A ≠ a)
- 공백도 문자로 취급
🔸 입출력 예
my_string | 결과 |
"people" | "peol" |
"We are the world" | "We arthwold" |
✅ 문제 풀이 흐름
- 문자열을 왼쪽부터 하나씩 확인
- 처음 본 문자면 결과에 추가
- 이미 나온 문자면 무시
✨ 필요한 도구 (자료구조)
🧡 1. StringBuilder란?
문자열을 빠르게 이어붙이는 도구
왜 필요할까?
- String은 매번 새로운 문자열을 만들어서 느림
- StringBuilder는 계속 이어붙여도 빠름!
기본 사용법:
StringBuilder sb = new StringBuilder();
sb.append('a');
sb.append('b');
String result = sb.toString();
🧡 2. HashSet이란?
중복을 허용하지 않는 저장소
왜 필요할까?
- 중복을 자동으로 걸러줌!
- 어떤 값이 이미 있는지 contains()로 빠르게 확인할 수 있음
기본 사용법:
HashSet<Character> set = new HashSet<>();
set.add('a');
set.contains('a'); // true
✅ 최종 코드
import java.util.HashSet;
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder();
HashSet<Character> seen = new HashSet<>();
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (!seen.contains(c)) {
seen.add(c); // 기억하고
sb.append(c); // 결과에도 추가
}
}
return sb.toString();
}
}
🧠 동작 흐름 예시
예시: "people"
- 'p' → 처음 봄 → 추가
- 'e' → 처음 봄 → 추가
- 'o' → 처음 봄 → 추가
- 'p' → 이미 있음 → 무시
- 'l' → 처음 봄 → 추가
- 'e' → 이미 있음 → 무시
결과: "peol"
💬 느낀 점
- 처음에는 StringBuilder, HashSet 이런 게 너무 어려웠다.
- 하지만 "StringBuilder = 빠른 문자열 합치기", "HashSet = 중복 방지"
- 이렇게 간단한 역할만 기억하면 충분했다!
- 문제를 작게 쪼개고 하나씩 풀어가면 결국 이해할 수 있다! 🌱
✅ 요약
개념 | 설명 |
StringBuilder | 문자열을 빠르게 합치는 도구 |
HashSet | 중복을 막아주는 저장소 |
핵심 포인트 | 문자열을 하나씩 보면서 처음만 남긴다 |
'코딩테스트' 카테고리의 다른 글
[코딩테스트 입문] 컨트롤 제트 ★★ (0) | 2025.05.07 |
---|---|
[코딩테스트 입문] 소인수분해 - 배열과 리스트, 차이부터 정복하기! (1) | 2025.05.07 |
[코딩테스트 입문] 공 던지기 (0) | 2025.04.29 |
[코딩테스트 입문] 숫자 찾기 – 문자열 indexOf로 한 줄 해결! ★ (0) | 2025.04.23 |
[코딩테스트 입문] 인덱스 바꾸기 (0) | 2025.04.23 |