알고리즘 문제풀이용 JAVA 문법 정리
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. 스트림과 람다
- 리스트나 배열을 가공하거나 필터링할 때 사용합니다.
List<Integer> evenNumbers = list.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
6. HashMap 및 HashSet
해시맵은 키-값 쌍으로 데이터를 저장하며, 해시셋은 중복을 제거하고 유일한 값만 저장합니다.
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> maxPq = new PriorityQueue<>(Collections.reverseOrder()); // 내림차순
pq.add(5);
pq.add(2);
int minVal = pq.poll(); // 2 (가장 작은 값)
8. 입출력 속도 향상
- 알고리즘 문제에서 속도가 중요한 경우, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용하는 것이 좋습니다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
bw.write("출력할 내용\n");
bw.flush();