본문 바로가기
알고리즘

[#ALGORITHM] 코딩 테스트에서 자주 사용되는 자바 라이브러리

by dopal2 2023. 3. 2.
반응형

- 수학 관련 라이브러리

          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));
        }
    }
}
반응형

댓글