본문 바로가기

Backend/Study

[Tip] 코딩 테스트 대비 백엔드 알고리즘 문제 추천

반응형
코딩 테스트 대비 백엔드 알고리즘 문제 추천

백엔드 코딩 테스트는 구현력과 함께 자료구조 선택, 복잡도 감각, 엣지 케이스 관리가 핵심입니다. 아래 로드맵과 문제 아키타입으로 빠르게 전반을 커버하고, 템플릿 코드로 실수를 줄여 보세요.

0. 개요

  1. 전략과 출제 경향
  2. 유형별 학습 로드맵
  3. 추천 문제 아키타입 30선
  4. 필수 템플릿 코드 모음
  5. 실전 체크리스트
  6. 모의시험 플랜(2주/4주)
  7. FAQ
  8. 결론 요약

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분
DPLIS, 동전 교환, 배낭점화식/전이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. 결론 요약

  • 백엔드 코테는 구현력 + 자료구조 선택 + 경계 케이스가 승부처입니다.
  • 아키타입 중심으로 연습하고, 템플릿을 몸에 익히면 합격선에 빠르게 도달합니다.
  • 모의시험 → 리뷰 → 반례 수집 루프를 매주 반복하세요.
반응형