- 수학 관련 라이브러리
Math : 자바에서 제공하는 기본 수학 함수를 제공하는 클래스. 예를 들어, 파이(Math.PI), 제곱근(Math.sqrt), 로그(Math.log) 등을 계산할 수 있다.
Random : 난수 생성 기능을 제공하는 클래스. 예를 들어, Random.nextInt() 메서드를 호출하면 정수 범위 내에서 랜덤한 값을 얻을 수 있다.
- 문자열 관련 라이브러리
String : 자바에서 문자열을 다루는 데 필수적인 클래스. 예를 들어, String.charAt() 메서드를 사용하면 문자열 내 특정 위치의 문자를 얻을 수 있다.
Pattern, Matcher : 정규 표현식을 지원하는 클래스. Pattern.compile() 메서드로 정규 표현식을 컴파일하고, Matcher.find() 메서드로 문자열에서 해당 패턴을 찾을 수 있다.
- 리스트/배열 관련 라이브러리
Arrays : 배열을 다루는 데 필요한 메서드를 제공하는 클래스. 예를 들어, Arrays.sort() 메서드로 배열을 정렬할 수 있다.
ArrayList : 리스트를 구현한 클래스. 예를 들어, ArrayList.add() 메서드로 리스트에 값을 추가할 수 있다.
- 그래프/트리 관련 라이브러리
LinkedList : 연결 리스트를 구현한 클래스. 예를 들어, LinkedList.add() 메서드로 값을 추가하거나, LinkedList.remove() 메서드로 값을 제거할 수 있다.
PriorityQueue : 우선순위 큐를 구현한 클래스. 예를 들어, PriorityQueue.offer() 메서드로 값을 추가하거나, PriorityQueue.poll() 메서드로 우선순위가 가장 높은 값을 얻을 수 있다.
1. 수학 관련 라이브러리
1) Math
- Math 클래스는 자주 사용되는 수학 함수들을 제공합니다.
- 대표적으로, 삼각함수, 지수/로그 함수, 절댓값, 최대/최소값 등을 제공합니다.
// 최대/최소값 구하기
int a = 10, b = 20;
int max = Math.max(a, b);
int min = Math.min(a, b);
System.out.println("최대값: " + max); // 출력 결과: "최대값: 20"
System.out.println("최소값: " + min); // 출력 결과: "최소값: 10"
// 절댓값 구하기
int num = -5;
int abs = Math.abs(num);
System.out.println("절댓값: " + abs); // 출력 결과: "절댓값: 5"
// 삼각함수 계산하기
double degree = 45.0;
double radian = Math.toRadians(degree); // degree를 라디안으로 변환
double sinValue = Math.sin(radian);
double cosValue = Math.cos(radian);
System.out.println("sin(" + degree + "): " + sinValue); // 출력 결과: "sin(45.0): 0.7071067811865475"
System.out.println("cos(" + degree + "): " + cosValue); // 출력 결과: "cos(45.0): 0.7071067811865476"
// 지수/로그 함수 계산하기
double base = 2.0;
double exponent = 3.0;
double powValue = Math.pow(base, exponent);
double logValue = Math.log10(powValue);
System.out.println(base + "의 " + exponent + "제곱: " + powValue); // 출력 결과: "2.0의 3.0제곱: 8.0"
System.out.println("log10(" + powValue + "): " + logValue); // 출력 결과: "log10(8.0): 0.9030899869919435"
2) BigDecimal
- BigDecimal 클래스는 정확한 소수 계산을 위해 사용됩니다.
- double과 같은 기본 타입을 사용할 경우, 부동소수점 오차 문제가 발생할 수 있으므로 BigDecimal 클래스를 사용하는 것이 좋습니다.
2. 문자열 관련 라이브러리
1) String
- String 클래스는 불변(immutable)하며, 문자열을 다루는 메서드가 많이 존재합니다.
- 문자열을 조작하면 새로운 문자열이 생성되므로, 문자열 조작이 빈번한 경우 StringBuilder 클래스를 사용하는 것이 좋습니다.
// 문자열 비교
String str1 = "hello";
String str2 = "world";
if(str1.equals(str2)) {
System.out.println("str1과 str2는 같습니다.");
} else {
System.out.println("str1과 str2는 다릅니다.");
}
// 문자열 합치기
String str3 = "안녕";
String str4 = "하세요";
String str5 = str3 + str4;
System.out.println(str5); // 출력 결과: "안녕하세요"
// 문자열 자르기
String str6 = "hello world";
String[] arr = str6.split(" "); // " "를 기준으로 문자열을 분리하여 배열에 저장
for(String s : arr) {
System.out.println(s);
}
2) StringBuilder
- StringBuilder 클래스는 가변(mutable)하며, 문자열을 조작하는 메서드가 많이 존재합니다.
- StringBuilder를 사용하면 문자열 조작 시, 새로운 문자열이 생성되지 않아 성능상 이점이 있습니다.
StringBuilder sb1 = new StringBuilder();
sb1.append("hello");
sb1.append("world");
System.out.println(sb1.toString()); // 출력 결과: "helloworld"
StringBuilder sb2 = new StringBuilder();
sb2.append("hello");
sb2.insert(5, " "); // 5번 인덱스에 공백 추가
sb2.append("world");
System.out.println(sb2.toString()); // 출력 결과: "hello world"
3) Pattern, Matcher 클래스
- 정규 표현식을 사용하면 문자열에서 원하는 패턴을 찾아내거나, 문자열을 분리할 수 있습니다.
// 정규 표현식을 사용하여 이메일 주소 유효성 검사
String email = "abc123@gmail.com";
Pattern pattern = Pattern.compile("\\w+@(\\w+\\.\\w+)+");
Matcher matcher = pattern.matcher(email);
if(matcher.matches()) {
System.out.println("이메일 주소가 유효합니다.");
} else {
System.out.println("이메일 주소가 유효하지 않습니다.");
}
// 정규 표현식을 사용하여 문자열 분리
String str7 = "a,b,c,d,e";
String[] arr2 = str7.split(",");
for(String s : arr2) {
System.out.println(s);
}
3. 리스트/배열 관련 라이브러리
1) ArrayList
- ArrayList 클래스는 크기가 가변적인 배열을 구현한 클래스입니다.
- 삽입, 삭제, 검색 등 다양한 메서드를 제공합니다.
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// ArrayList 생성
ArrayList<Integer> arrayList = new ArrayList<>();
// 요소 추가
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
// 요소 접근
System.out.println("첫 번째 요소: " + arrayList.get(0)); // 출력 결과: "첫 번째 요소: 1"
System.out.println("두 번째 요소: " + arrayList.get(1)); // 출력 결과: "두 번째 요소: 2"
System.out.println("세 번째 요소: " + arrayList.get(2)); // 출력 결과: "세 번째 요소: 3"
// 요소 삭제
arrayList.remove(1);
System.out.println("두 번째 요소 삭제 후: " + arrayList.toString()); // 출력 결과: "[1, 3]"
// 리스트 크기
System.out.println("리스트 크기: " + arrayList.size()); // 출력 결과: "리스트 크기: 2"
}
2) Arrays
- Arrays 클래스는 배열을 다루는 데에 유용한 다양한 메서드를 제공합니다.
- 정렬, 복사, 검색 등 다양한 메서드를 제공합니다.
import java.util.Arrays;
public class ArraysExample {
public static void main(String[] args) {
// 배열 생성
int[] array = { 3, 2, 1 };
// 배열 요소 정렬
Arrays.sort(array);
System.out.println("정렬 후: " + Arrays.toString(array)); // 출력 결과: "[1, 2, 3]"
// 배열 복사
int[] copyArray = Arrays.copyOf(array, 2);
System.out.println("복사한 배열: " + Arrays.toString(copyArray)); // 출력 결과: "[1, 2]"
// 배열 요소 검색
int index = Arrays.binarySearch(array, 2);
System.out.println("요소 2의 인덱스: " + index); // 출력 결과: "요소 2의 인덱스: 1"
}
}
4. 그래프/트리 관련 라이브러리
1) ArrayList와 HashMap을 이용한 그래프 구현
- 그래프는 노드와 간선으로 이루어진 자료구조입니다. 이를 ArrayList와 HashMap을 이용하여 구현할 수 있습니다.
- ArrayList는 노드들을 저장하며, HashMap은 각 노드의 이웃 노드들을 저장합니다.
import java.util.ArrayList;
import java.util.HashMap;
public class GraphExample {
public static void main(String[] args) {
// 그래프 생성
HashMap<Integer, ArrayList<Integer>> graph = new HashMap<>();
// 노드 추가
for (int i = 1; i <= 4; i++) {
graph.put(i, new ArrayList<>());
}
// 간선 추가
graph.get(1).add(2);
graph.get(2).add(3);
graph.get(3).add(4);
graph.get(4).add(1);
// 그래프 출력
for (int i = 1; i <= 4; i++) {
System.out.print(i + "의 이웃: ");
for (int j : graph.get(i)) {
System.out.print(j + " ");
}
System.out.println();
}
}
}
2) TreeSet 클래스와 TreeMap 클래스를 이용한 트리 구현
- TreeSet 클래스와 TreeMap 클래스는 각각 이진 탐색 트리를 구현한 클래스입니다.
- TreeSet은 값만, TreeMap은 키와 값 쌍을 저장합니다.
import java.util.TreeSet;
import java.util.TreeMap;
public class TreeExample {
public static void main(String[] args) {
// TreeSet 생성
TreeSet<Integer> treeSet = new TreeSet<>();
// 값 추가
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
// 값 출력
for (int i : treeSet) {
System.out.print(i + " ");
}
System.out.println();
// TreeMap 생성
TreeMap<String, Integer> treeMap = new TreeMap<>();
// 값 추가
treeMap.put("apple", 3);
treeMap.put("banana", 2);
treeMap.put("cherry", 1);
// 값 출력
for (String key : treeMap.keySet()) {
System.out.println(key + ": " + treeMap.get(key));
}
}
}
댓글