문제 2개만 더 풀면 끝이다, 힘내자!!!💖
LinkedHashSet은 HashSet의 순서 보장 기능을 확장한 Java 컬렉션입니다. LinkedHashSet은 요소가 추가된 순서를 유지하면서 HashSet의 모든 특성(빠른 접근 시간, 중복 허용 안 함 등)을 유지합니다. 이 특성 때문에 LinkedHashSet은 순서가 중요하거나 데이터 삽입 순서를 기록해야 할 때 유용하게 사용될 수 있습니다.
LinkedHashSet을 사용해야 하는 문제 유형
- 순서를 유지해야 하는 중복 제거: 입력 순서대로 요소를 저장하면서 중복을 허용하지 않아야 할 때.
- 순서가 중요한 데이터 집합 연산: 집합 연산을 수행하면서 요소의 입력 순서를 유지해야 하는 경우.
- 최근 사용 데이터 추적: 최근에 추가된 요소를 추적하면서 중복 입력을 허용하지 않아야 할 때 유용합니다.
가장 좋은 문제와 솔루션 예제
문제: 첫 번째 고유 문자 찾기
문제 설명: 주어진 문자열에서 처음으로 등장하는 고유 문자의 인덱스를 반환합니다. 모든 문자가 중복인 경우 -1을 반환합니다.
예시:
- 입력: "loveleetcode"
- 출력: 2 (첫 번째 고유 문자 'v'의 인덱스)
솔루션 코드
import java.util.LinkedHashSet;
import java.util.Set;
public class Solution {
public int firstUniqChar(String s) {
Set<Character> duplicates = new HashSet<>();
LinkedHashSet<Character> order = new LinkedHashSet<>();
for (char c : s.toCharArray()) {
if (!duplicates.contains(c)) {
if (order.contains(c)) {
order.remove(c);
duplicates.add(c);
} else {
order.add(c);
}
}
}
if (!order.isEmpty()) {
for (char c : order) {
return s.indexOf(c); // 반환하자마자 종료, 가장 첫 번째 고유 문자의 인덱스
}
}
return -1;
}
}
코드 설명
- duplicates HashSet은 중복 문자를 추적합니다.
- order LinkedHashSet은 요소의 삽입 순서를 유지하며, 중복되지 않는 문자만을 유지합니다.
- 문자열을 순회하면서 각 문자를 두 집합에 적절히 추가 또는 삭제합니다.
- 순회가 끝난 후, order에 남아 있는 첫 번째 요소가 처음으로 등장하는 고유 문자입니다. 이 문자의 인덱스를 문자열에서 찾아 반환합니다.
LinkedHashSet을 사용하는 이 예제에서는 중복을 제거하면서도 요소의 추가 순서를 유지하는 것이 핵심입니다. 이를 통해 첫 번째 고유 문자를 효율적으로 찾을 수 있습니다. 이러한 접근 방식은 순서가 중요한 여러 다른 문제 유형에도 적용될 수 있습니다.
'자바 > 자바 자료구조' 카테고리의 다른 글
자바 자료구조 총 정리를 마치며 (0) | 2024.04.28 |
---|---|
자바 - TreeSet으로 코테 푸는 법 (0) | 2024.04.28 |
자바 - HashSet으로 코테 푸는 법 (0) | 2024.04.28 |
자바 - Set 이야기 (0) | 2024.04.28 |
자바 - ArrayDeque으로 코테 푸는 법 (0) | 2024.04.28 |