새발블로그
코딩테스트를 위한 Java 개요 본문
1. 패키지 임포트
자바에서 클래스 또는 인터페이스를 사용하려면 해당 패키지를 import 해야 한다.
import java.util.*; // 대부분의 코딩 테스트 문제에서 필수
import java.io.*; // BufferedReader, BufferedWriter 등 입출력 시 필요
- java.util : ArrayList, HashMap, Queue, Scanner 등
- java.io : BufferedReader, InputStreamReader, BufferedWriter, OutputStreamWriter
2. 표준 입출력
Scanner (간단한 입력)
Scanner scanner = new Scanner(System.in);
String str = scanner.next(); // 문자열
int num = scanner.nextInt(); // 정수
double d = scanner.nextDouble(); // 실수
- 단점: 입력량이 많으면 느림 → 시간 초과 위험
BufferedReader (입력이 많은 경우 권장)
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] tokens = reader.readLine().split(" ");
int n = Integer.parseInt(tokens[0]);
int m = Integer.parseInt(tokens[1]);
BufferedWriter (출력이 많은 경우)
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.write("출력 내용");
writer.newLine(); // 줄 바꿈
writer.flush(); // 반드시 호출
3. 커스텀 클래스 구현
내부 클래스 사용
public class Solution {
static class Entry implements Comparable<Entry> {
int weight;
int to;
public Entry(int weight, int to) {
this.weight = weight;
this.to = to;
}
@Override
public int compareTo(Entry o) {
return this.weight - o.weight;
}
}
}
- Comparable<T> 인터페이스를 구현하여 정렬 기준 설정
4. 객체지향과 인터페이스
Java는 객체지향 언어로, 클래스 간 역할을 분리해 유연한 구조를 제공한다.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- System.in: 표준 입력 스트림
- InputStreamReader: 바이트를 문자로 변환
- BufferedReader: 효율적인 읽기 제공
인터페이스 사용 예시
Queue<String> q = new ArrayDeque<>();
- 인터페이스 타입으로 선언 → 다양한 구현체 교체 가능 (LinkedList, PriorityQueue, 등)
5. 헬퍼 클래스
자바는 다양한 유틸리티 메소드를 제공하는 헬퍼 클래스를 제공한다.
- Arrays.sort(array): 배열 정렬
- Collections.sort(list): 리스트 정렬
- Math.max(), Math.min(), Math.abs() 등
6. 원시 타입과 참조 타입
| 원시 타입 | 참조 타입 |
| int, long 등 | Integer, String, int[], ArrayList 등 |
주요 차이점
- 원시 타입은 값을 직접 저장 → 복사됨
- 참조 타입은 객체의 참조값 저장 → 객체 공유됨
int[] a = new int[]{1, 2, 3};
int[] b = a;
b[0] = 42; // a[0]도 42로 변경됨
7. 제네릭 타입
List<Integer> list = new ArrayList<>();
Queue<String> q = new LinkedList<>();
- 제네릭은 참조 타입만 사용 가능
- 원시 타입 사용 불가 → 래퍼 클래스(Integer, Double, 등) 사용
오토박싱 & 언박싱
Integer a = 10; // 오토박싱
int b = a; // 언박싱
8. 컬렉션 순회
일반 for문
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
For-each 문
for (int n : array) {
System.out.println(n);
}
Map 순회
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
9. 흐름 제어 & 라벨
break & continue
for (int i = 0; i < 10; i++) {
if (i == 5) break;
if (i % 2 == 0) continue;
}
라벨을 이용한 반복문 탈출
outer:
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (condition) break outer;
}
}
10. 큰 값 설정
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
long maxL = Long.MAX_VALUE;
long minL = Long.MIN_VALUE;
연산 중 오버플로우가 발생하지 않도록 주의
'Problem Solving > 개념' 카테고리의 다른 글
| 완전탐색 (Exhaustive Search) - 반복문을 활용한 접근 (2) | 2025.07.04 |
|---|---|
| 시간복잡도 (0) | 2025.07.04 |
| Java 문자열 처리 (0) | 2025.07.04 |
| 코딩테스트를 위한 Java 심화 (0) | 2025.07.04 |
| 테스트케이스 (0) | 2025.07.04 |