반응형
🔷 1. [정렬 패턴]
정렬 기준이 1개 이상인 경우, Comparator 연습 필수
문제 이름 문제 번호 특징
좌표 정렬하기 | 11650 | 기본 정렬 |
좌표 정렬하기 2 | 11651 | 다중 조건 정렬 |
나이순 정렬 | 10814 | Stable Sort 필요 |
국영수 | 10825 | 복합 정렬 조건 |
회의실 배정 | 1931 | 그리디 + 정렬 |
🔷 2. [자료구조 + Map/Set]
카운팅, 중복 제거, 순서 없는 데이터 처리
문제 이름 문제 번호 특징
숫자 카드 | 10815 | Set 활용 |
회사에 있는 사람 | 7785 | Map + 정렬 |
나는야 포켓몬 마스터 | 1620 | Map 양방향 조회 |
카드 | 11652 | Map + 최대 빈도 |
🔷 3. [BFS 패턴]
최단 거리, 이동 경로, 단계 탐색
문제 이름 문제 번호 특징
미로 탐색 | 2178 | 기본 BFS |
토마토 | 7576 | 2차원 BFS + 날짜 계산 |
불! | 4179 | 동시 BFS (불 + 사람) |
숨바꼭질 | 1697 | 1차원 최단거리 |
빙산 | 2573 | BFS + 시뮬레이션 |
🔷 4. [DFS / 백트래킹 패턴]
완전 탐색, 모든 경우 찾기
문제 이름 문제 번호 특징
N과 M (시리즈) | 15649~15654 | 순열/조합 기본기 |
연결 요소의 개수 | 11724 | DFS 기본 |
단지번호붙이기 | 2667 | DFS/BFS 모두 가능 |
유기농 배추 | 1012 | DFS/BFS 대표 문제 |
감시 피하기 | 18428 | 백트래킹 조합 |
🔷 5. [우선순위 큐 / 힙 패턴]
작은 값부터 꺼내야 할 때, 정렬 대체
문제 이름 문제 번호 특징
최소 힙 | 1927 | 기본 힙 |
절댓값 힙 | 11286 | Comparator 필요 |
카드 정렬하기 | 1715 | 누적 합 최소화 |
파일 합치기 3 | 13975 | 우선순위 큐 그리디 |
🔷 6. [시뮬레이션 패턴]
구현력, 조건 처리 꼼꼼하게
문제 이름 문제 번호 특징
로봇 청소기 | 14503 | 시뮬레이션 기본 |
톱니바퀴 | 14891 | 연쇄 시뮬레이션 |
마법사 상어와 파이어볼 | 20056 | 구현 난이도 높음 |
컨베이어 벨트 위의 로봇 | 20055 | 시뮬레이션 대표 |
✅ 추천 풀이 루틴
- 정렬 3문제
- Map/Set 활용 2문제
- BFS 3문제
- DFS/백트래킹 3문제
- 우선순위 큐 2문제
- 시뮬레이션 2문제
📄 2. Java 템플릿 코드 모음
BFS 템플릿
더보기
import java.util.*;
public class BFSExample {
static int N = 5, M = 5;
static int[][] map = new int[N][M];
static boolean[][] visited = new boolean[N][M];
static int[] dx = {-1, 1, 0, 0}; // 상하좌우
static int[] dy = {0, 0, -1, 1};
static void bfs(int x, int y) {
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{x, y});
visited[x][y] = true;
while (!queue.isEmpty()) {
int[] now = queue.poll();
int cx = now[0];
int cy = now[1];
for (int i = 0; i < 4; i++) {
int nx = cx + dx[i];
int ny = cy + dy[i];
// 범위 & 방문 체크
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (visited[nx][ny] || map[nx][ny] == 0) continue;
visited[nx][ny] = true;
queue.offer(new int[]{nx, ny});
}
}
}
}
DFS 템플릿
더보기
public class DFSExample {
static int N = 5, M = 5;
static int[][] map = new int[N][M];
static boolean[][] visited = new boolean[N][M];
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
static void dfs(int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (visited[nx][ny] || map[nx][ny] == 0) continue;
dfs(nx, ny);
}
}
}
정렬 템플릿
더보기
import java.util.Arrays;
import java.util.Collections;
public class SortExample {
public static void main(String[] args) {
Integer[] arr = {5, 3, 2, 4, 1};
Arrays.sort(arr); // 오름차순 정렬
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, Collections.reverseOrder()); // 내림차순 정렬
System.out.println(Arrays.toString(arr));
}
}
우선순위 큐 템플릿
더보기
import java.util.PriorityQueue;
import java.util.Collections;
public class PriorityQueueExample {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>(); // 최소 힙
pq.offer(5);
pq.offer(2);
pq.offer(8);
System.out.println(pq.poll()); // 2
PriorityQueue<Integer> maxPq = new PriorityQueue<>(Collections.reverseOrder()); // 최대 힙
maxPq.offer(5);
maxPq.offer(2);
maxPq.offer(8);
System.out.println(maxPq.poll()); // 8
}
}
반응형
'코딩테스트 > 코딩테스트(Java)' 카테고리의 다른 글
[코딩테스트] Java - 기본 점검: 정렬 (0) | 2025.04.09 |
---|---|
[코딩테스트] Java - 기본 점검: 자료구조 (0) | 2025.04.09 |
[코딩테스트] Java - 삼성 코딩테스트 준비 문제 (0) | 2025.04.08 |
[코딩테스트] Java - 백트래킹 (0) | 2025.03.17 |
[코딩테스트] Java - 추천 문제 (0) | 2025.03.17 |