중복 문자 제거
아래는 두 개의 문자열을 입력받아 중복된 문자를 제거하는 Java 코드 예제입니다.
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 문자열을 입력하세요: ");
String str1 = scanner.nextLine();
System.out.print("두 번째 문자열을 입력하세요: ");
String str2 = scanner.nextLine();
String result = removeDuplicates(str1, str2);
System.out.println("중복된 문자를 제거한 결과: " + result);
scanner.close();
}
public static String removeDuplicates(String str1, String str2) {
Set<Character> uniqueChars = new HashSet<>();
for (char c : str1.toCharArray()) {
uniqueChars.add(c);
}
StringBuilder result = new StringBuilder();
for (char c : str2.toCharArray()) {
if (!uniqueChars.contains(c)) {
result.append(c);
}
}
return result.toString();
}
}이 코드는 두 문자열을 입력받아 각 문자열의 중복된 문자를 제거한 후, 결과를 출력합니다.
애너그램 판별
아래는 두 개의 문자열을 입력받아 애너그램인지 판별하는 Java 코드 예제입니다.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 문자열을 입력하세요: ");
String str1 = scanner.nextLine();
System.out.print("두 번째 문자열을 입력하세요: ");
String str2 = scanner.nextLine();
boolean isAnagram = checkAnagram(str1, str2);
if (isAnagram) {
System.out.println("두 문자열은 애너그램입니다.");
} else {
System.out.println("두 문자열은 애너그램이 아닙니다.");
}
scanner.close();
}
public static boolean checkAnagram(String str1, String str2) {
if (str1.length() != str2.length()) {
return false;
}
char[] chars1 = str1.toCharArray();
char[] chars2 = str2.toCharArray();
Arrays.sort(chars1);
Arrays.sort(chars2);
return Arrays.equals(chars1, chars2);
}
}이 코드는 두 문자열을 입력받아 애너그램인지 판별하고 그 결과를 출력합니다.
애너그램(Anagram)은 두 개 이상의 단어나 문장이, 각각의 문자를 재배열하여 다른 단어나 문장으로 만들어지는 것을 말합니다. 즉, 두 문자열이 애너그램인 경우, 두 문자열은 같은 문자들을 사용하지만 그 순서가 다릅니다.
예를 들어, "listen"과 "silent"는 애너그램 관계입니다. "listen"의 문자를 재배열하면 "silent"가 되기 때문입니다. 하지만 "hello"와 "world"는 애너그램 관계가 아닙니다. 두 문자열은 서로 다른 문자들을 사용하기 때문입니다.
애너그램은 문자열 처리나 단어 게임, 암호화 분야에서 활용될 수 있으며, 주어진 문자열의 문자들을 정렬하고 비교함으로써 애너그램 여부를 판별할 수 있습니다.
HashSet
자바에서 제공하는 HashSet은 Set 인터페이스를 구현한 컬렉션 클래스 중 하나입니다. HashSet은 중복을 허용하지 않고, 순서가 없는 요소들의 집합을 저장하기 위해 사용됩니다. 이 클래스는 해시 함수를 사용하여 요소들을 저장하므로 데이터를 빠르게 추가, 제거, 검색할 수 있는 특징을 가지고 있습니다.
HashSet의 주요 특징과 메서드는 다음과 같습니다:
- 중복 요소 허용하지 않음:
HashSet은 같은 요소를 중복해서 저장하지 않습니다. 따라서 동일한 값을 여러 번 추가해도 실제로는 하나만 저장됩니다. - 순서가 없음:
HashSet은 요소들을 추가한 순서를 보장하지 않습니다. 따라서 요소를 순서대로 접근하거나 정렬된 형태로 얻을 수 없습니다. - 해시 기반 저장:
HashSet은 내부적으로 해시 함수를 사용하여 요소들을 저장하고 관리합니다. 이로 인해 데이터 검색이 빠르며 일반적으로 O(1)의 시간 복잡도를 가집니다. - null 요소 허용:
HashSet은null요소를 허용합니다. 따라서null값을 저장하고 관리할 수 있습니다.
HashSet을 사용하려면 java.util 패키지를 import하고, HashSet 클래스의 인스턴스를 생성하여 요소를 추가, 삭제, 검색하는 작업을 수행할 수 있습니다. 아래는 간단한 예제입니다:
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("orange");
fruits.add("apple"); // 중복된 요소 추가 시 무시됨
System.out.println(fruits); // 순서가 없는 요소 출력
fruits.remove("banana");
System.out.println(fruits);
System.out.println("Contains apple: " + fruits.contains("apple"));
System.out.println("Size: " + fruits.size());
}
}이 예제에서는 HashSet을 사용하여 과일 이름을 저장하고 다양한 메서드를 활용하여 요소를 추가, 제거, 검색하고 크기를 확인하는 방법을 보여줍니다.