언어/Java

알고리즘 문제풀이용 JAVA 문법 정리

린예라 2024. 11. 13. 17:41

1. 반복문과 조건문

  • for-each 문: 배열 또는 컬렉션을 순회할 때 간편하게 사용할 수 있습니다.
     
    int[] arr = {1, 2, 3, 4};
    for (int num : arr) {
        System.out.println(num);
    }
  • 3항 연산자: 조건문을 짧게 쓸 때 유용합니다.
     
    int min = (a < b) ? a : b;

2. Arrays 클래스

  • 배열 관련 유용한 메서드들을 포함하고 있습니다.
  • 정렬: Arrays.sort(arr);
  • 이진 탐색: Arrays.binarySearch(arr, key); (정렬된 배열에서 사용)
  • 초기화: Arrays.fill(arr, value);

3. Collections 클래스

  • 컬렉션과 관련된 다양한 메서드를 제공합니다.
  • 리스트 정렬: Collections.sort(list); (오름차순 정렬)
  • 최대값, 최소값: Collections.max(list);, Collections.min(list);
  • 리스트 뒤집기: Collections.reverse(list);

4. Math 클래스

  • 수학 관련 함수들이 많아 알고리즘에서 자주 사용됩니다.
  • 최대, 최소: Math.max(a, b);, Math.min(a, b);
  • 절대값: Math.abs(x);
  • 거듭제곱, 제곱근: Math.pow(base, exp);, Math.sqrt(x);

5. 스트림과 람다

  • 리스트나 배열을 가공하거나 필터링할 때 사용합니다.
 
int sum = Arrays.stream(arr).sum();
List<Integer> evenNumbers = list.stream()
                                 .filter(num -> num % 2 == 0)
                                 .collect(Collectors.toList());

6. HashMap 및 HashSet

해시맵은 키-값 쌍으로 데이터를 저장하며, 해시셋은 중복을 제거하고 유일한 값만 저장합니다.

 
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
int count = map.getOrDefault("apple", 0);

Set<Integer> set = new HashSet<>();
set.add(1);
set.contains(1);  // true
 

주요 메서드들

  • put(K key, V value): 딕셔너리에 키-값 쌍을 삽입합니다.
  • get(Object key): 키에 해당하는 값을 가져옵니다. 키가 없으면 null 반환.
  • containsKey(Object key): 특정 키가 있는지 확인합니다.
  • remove(Object key): 특정 키에 해당하는 값을 제거합니다.
  • keySet(): 모든 키를 Set으로 반환합니다.
  • values(): 모든 값을 Collection으로 반환합니다.
  • entrySet(): 모든 키-값 쌍을 Set<Map.Entry<K, V>>로 반환합니다.

리스트로변환

1. 키(Key) 목록을 List로 변환

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 3);
        map.put("banana", 5);
        map.put("cherry", 2);

        List<String> keys = new ArrayList<>(map.keySet());
        System.out.println("Keys List: " + keys);
    }
}

 

2. 값(Value) 목록을 List로 변환

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 3);
        map.put("banana", 5);
        map.put("cherry", 2);

        List<Integer> values = new ArrayList<>(map.values());
        System.out.println("Values List: " + values);
    }
}

 

3. 키-값 쌍(Entry)을 List로 변환

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 3);
        map.put("banana", 5);
        map.put("cherry", 2);

        List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
        System.out.println("Entries List: " + entries);

        // 각 엔트리에서 키와 값을 출력해보기
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

 

7. 우선순위 큐 (PriorityQueue)

  • 최소/최대값을 빠르게 꺼낼 때 유용합니다.
 
PriorityQueue<Integer> pq = new PriorityQueue<>(); // 오름차순
PriorityQueue<Integer> maxPq = new PriorityQueue<>(Collections.reverseOrder()); // 내림차순
pq.add(5);
pq.add(2);
int minVal = pq.poll();  // 2 (가장 작은 값)

8. 입출력 속도 향상

  • 알고리즘 문제에서 속도가 중요한 경우, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용하는 것이 좋습니다.
 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
bw.write("출력할 내용\n");
bw.flush();