반응형
백엔드 코딩 테스트는 구현력과 함께 자료구조 선택, 복잡도 감각, 엣지 케이스 관리가 핵심입니다. 아래 로드맵과 문제 아키타입으로 빠르게 전반을 커버하고, 템플릿 코드로 실수를 줄여 보세요.
0. 개요
- 전략과 출제 경향
- 유형별 학습 로드맵
- 추천 문제 아키타입 30선
- 필수 템플릿 코드 모음
- 실전 체크리스트
- 모의시험 플랜(2주/4주)
- FAQ
- 결론 요약
1. 전략과 출제 경향
| 영역 | 빈출 테마 | 핵심 스킬 | 오류 포인트 |
|---|---|---|---|
| 자료구조 | 스택/큐/덱, 힙, 해시맵, 트라이 | 삽입·삭제·탐색 복잡도 감각 | 오버플로, 중복 처리 누락 |
| 탐색/최적화 | 투 포인터, 슬라이딩 윈도우, 이분 탐색 | 모노토닉 조건 정의, 포인터 이동 규칙 | 무한 루프, 경계 off-by-one |
| 그래프 | BFS/DFS, 최단거리, 위상정렬, 유니온파인드 | 방문 관리, 가중치 처리 | 중복 방문, 음수 가중치 |
| DP | 배낭, LIS, 구간 DP, 비트마스크 | 점화식, 메모이제이션 | 초기값/전이 누락 |
2. 유형별 학습 로드맵
2.1 필수 선행
- 시간·공간 복잡도 표기와 상한 추정
- 입출력 최적화, 코너케이스 리스트업
- 테스트 케이스 셋업(정상/경계/병합)
2.2 주차별 권장
- 1주차: 해시/스택/큐 + 문자열
- 2주차: 투포인터/슬윈 + 이분 탐색
- 3주차: 그래프(BFS/DFS/다익스트라/위상)
- 4주차: DP + 누적합/세그트리
3. 추천 문제 아키타입 30선
| 카테고리 | 아키타입 | 핵심 아이디어 | 목표 시간 |
|---|---|---|---|
| 해시 | 두 수 합, 애너그램 그룹핑 | 보조 인덱스·빈도 맵 | 20분 |
| 스택/큐 | 유효 괄호, 주식가격, 최근접 큰 수 | 모노스택 | 20분 |
| 슬윈 | 중복 없는 부분문자열 길이 | 윈도우 확장/축소 | 25분 |
| 투포인터 | 부분합, 정렬 배열 합 K | 정렬+양끝 포인터 | 25분 |
| 이분탐색 | 답 위에 쓰는 탐색(최소 용량) | 단조성 판단 | 30분 |
| 그래프 | 미로 최단거리, 섬 개수 | BFS/DFS 방문관리 | 25분 |
| 최단거리 | 가중 그래프 최단경로 | 다익스트라 | 35분 |
| 위상 | 선수 과목, 작업 스케줄링 | Kahn 큐 | 30분 |
| 유니온파인드 | 네트워크 연결/사이클 | 경로압축+랭크 | 25분 |
| DP | LIS, 동전 교환, 배낭 | 점화식/전이 | 40분 |
4. 필수 템플릿 코드 모음
4.1 BFS 템플릿(격자)
from collections import deque
def bfs(grid, sx, sy):
n, m = len(grid), len(grid[0])
INF = 10**18
dist = [[INF]*m for _ in range(n)]
q = deque([(sx, sy)])
dist[sx][sy] = 0
while q:
x, y = q.popleft()
for dx, dy in ((1,0),(-1,0),(0,1),(0,-1)):
nx, ny = x+dx, y+dy
if 0 <= nx < n and 0 <= ny < m and grid[nx][ny] != "#" and dist[nx][ny] == INF:
dist[nx][ny] = dist[x][y] + 1
q.append((nx, ny))
return dist
4.2 이분 탐색(답 위 탐색)
def feasible(x):
# 용량 x로 조건을 만족하는가?
return True
def binary_search_answer(lo, hi):
# 최소 해를 찾는 패턴
while lo < hi:
mid = (lo + hi) // 2
if feasible(mid):
hi = mid
else:
lo = mid + 1
return lo
4.3 다익스트라(우선순위 큐)
import heapq
def dijkstra(adj, start):
INF = 10**18
n = len(adj)
dist = [INF]*n
dist[start] = 0
pq = [(0, start)]
while pq:
d, u = heapq.heappop(pq)
if d != dist[u]:
continue
for v, w in adj[u]:
nd = d + w
if nd < dist[v]:
dist[v] = nd
heapq.heappush(pq, (nd, v))
return dist
4.4 유니온파인드
def find(p, x):
if p[x] != x:
p[x] = find(p, p[x])
return p[x]
def unite(p, r, a, b):
ra, rb = find(p, a), find(p, b)
if ra == rb: return False
if r[ra] < r[rb]:
ra, rb = rb, ra
p[rb] = ra
if r[ra] == r[rb]:
r[ra] += 1
return True
4.5 누적합·슬라이딩 윈도우
def prefix_sum(a):
ps = [0]
for x in a:
ps.append(ps[-1] + x)
return ps # 구간합 [l, r] = ps[r+1] - ps[l]
def longest_unique_substring(s):
pos = {}
left = ans = 0
for right, ch in enumerate(s):
if ch in pos and pos[ch] >= left:
left = pos[ch] + 1
pos[ch] = right
ans = max(ans, right - left + 1)
return ans
5. 실전 체크리스트
| 항목 | 체크 | 메모 |
|---|---|---|
| 입력 | 대량 입력 최적화 | 파싱, 공백/빈 줄, 유니코드 |
| 복잡도 | 최악 케이스 계산 | 자료구조 교체로 절약 가능? |
| 엣지 | 빈 배열, 음수, 중복, overflow | 경계값 먼저 테스트 |
| 검증 | 샘플·자가 케이스 | 반례 생성 습관화 |
| 로그 | 디버그 레벨 토글 | 제출 전 제거 |
6. 모의시험 플랜(2주/4주)
6.1 2주 집중 플랜
- 월·목: 해시/스택/큐, 문자열
- 화·금: 투포인터/슬윈, 이분 탐색
- 수·토: 그래프 기본 + 최단거리
- 일: 종합 모의(90분) + 리뷰
6.2 4주 확장 플랜
- 1~2주: 위 플러스 위상정렬/유니온파인드
- 3주: DP 입문 → 구간 DP·비트마스크
- 4주: 누적합/세그트리·트라이 선택 학습
7. FAQ
7.1 파이썬과 자바 중 어느 언어로 준비할까요?
평소 익숙한 언어를 우선 사용하세요. 자료구조 API 속도가 중요한 플랫폼이면 자바, 구현 속도와 간결성이 중요하면 파이썬이 유리합니다.
7.2 DP가 어렵습니다. 어떻게 접근하나요?
상태 정의 → 전이 정의 → 초기값 → 순서 결정의 네 단계로 쪼개고, 작은 입력에서 표를 손으로 채워보며 패턴을 찾으세요.
7.3 모의고사 시간 관리 팁이 있나요?
60분 기준으로 쉬운 20분, 중간 25분, 어려운 15분에 배분하고, 막히면 즉시 다음 문제로 넘어가며 끝에 재도전하세요.
8. 결론 요약
- 백엔드 코테는 구현력 + 자료구조 선택 + 경계 케이스가 승부처입니다.
- 아키타입 중심으로 연습하고, 템플릿을 몸에 익히면 합격선에 빠르게 도달합니다.
- 모의시험 → 리뷰 → 반례 수집 루프를 매주 반복하세요.
반응형
'Backend > Study' 카테고리의 다른 글
| [Tip] 직장인 개발자의 N잡 시작 가이드 (퇴근 후 활용법) (0) | 2025.11.14 |
|---|---|
| [Tip] 사이드 프로젝트 아이디어 추천 (백엔드 개발자용) (0) | 2025.11.13 |
| [Tip] 개발자 포트폴리오 작성 꿀팁 (백엔드 기준) (0) | 2025.11.12 |
| [Tip] IntelliJ 플러그인 추천 TOP 10 (개발 생산성 향상) (0) | 2025.11.10 |
| [Tip] IntelliJ 플러그인 추천 TOP 10 (개발 생산성 향상) (0) | 2025.11.07 |