본문 바로가기
코딩테스트/코딩테스트(Java)

[코딩테스트] Java - 패턴별 연습 문제 리스트

by cogito30 2025. 4. 8.
반응형

🔷 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
    }
}

 

 

 

반응형