Ch.12 모의 면접 & 종합 전략

모의면접 2 — Medium 3문제 실전

LRU Cache, Number of Islands, Coin Change를 면접 형식으로 풀어본다Medium 문제에서 자료구조 결합과 DP 접근법을 실습한다

Medium이 바로 **합격선**입니다

대부분의 코딩 면접은 Medium 난이도에서 합격/불합격이 갈립니다. 패턴을 조합하는 능력이 핵심입니다.

Easy는 풀겠는데, Medium부터 갑자기 막히는 이유는?

Medium = 패턴 2개 결합입니다. 하나씩 분해하면 풀 수 있습니다.

lightbulb

핵심 개념

LRU Cache

가장 오래 사용하지 않은 항목을 제거하는 캐시 자료구조

OrderedDict

삽입 순서를 유지하는 해시맵 — LRU 구현에 최적


article

핵심 내용

Medium 모의면접을 시작합니다. 패턴 결합에 집중하세요

LRU Cache 용량 `capacity`인 LRU 캐시를 구현하세요. • `get(key)` — 키가 있으면 값 반환, 없으면 -1 • `put(key, value)` — 키-값 저장. 용량 초과 시 가장 오래된 항목 삭제 두 연산 모두 O(1)이어야 합니다.

키워드 분석: O(1) 조회 → HashMap, 순서 관리 → 연결 리스트

LRU = HashMap + 이중 연결 리스트 결합. Python에서는 OrderedDict로 간단 구현 가능

Python의 OrderedDict를 활용한 깔끔한 구현입니다

from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity
    
    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        # 접근한 키를 맨 뒤로 이동 (최근 사용)
        self.cache.move_to_end(key)
        return self.cache[key]
    
    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        # 용량 초과 시 가장 오래된 (맨 앞) 항목 제거
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)

get과 put 모두 O(1) — OrderedDict가 순서 관리를 내부적으로 처리합니다

면접에서 말하기: "OrderedDict를 써도 될까요? 안 된다면 해시맵 + 이중 연결 리스트로 직접 구현하겠습니다."

두 번째 문제입니다. 그래프 탐색 패턴을 적용합니다

Number of Islands '1'(땅)과 '0'(물)으로 이루어진 2D 그리드가 주어집니다. 섬의 개수를 세세요. (가로/세로로 연결된 '1'이 하나의 섬) 예시: [[1,1,0,0], [1,1,0,0], [0,0,1,0], [0,0,0,1]] → 3개

def num_islands(grid):
    if not grid:
        return 0
    
    rows, cols = len(grid), len(grid[0])
    count = 0
    
    def dfs(r, c):
        # 범위 밖이거나 물이면 종료
        if r < 0 or r >= rows or c < 0 or c >= cols:
            return
        if grid[r][c] == '0':
            return
        
        grid[r][c] = '0'  # 방문 표시
        dfs(r + 1, c)     # 상하좌우 탐색
        dfs(r - 1, c)
        dfs(r, c + 1)
        dfs(r, c - 1)
    
    for r in range(rows):
        for c in range(cols):
            if grid[r][c] == '1':
                count += 1
                dfs(r, c)  # 연결된 모든 땅을 물로 변환
    
    return count

키워드 '연결된 영역'DFS/BFS. 방문한 셀은 '0'으로 바꿔 재방문 방지

시간 O(m×n), 공간 O(m×n) 재귀 스택. 그리드 탐색 문제의 기본 템플릿입니다

세 번째 문제입니다. DP(동적 프로그래밍) 패턴입니다

Coin Change 동전 종류 `coins`와 금액 `amount`가 주어집니다. 금액을 만들 최소 동전 개수를 구하세요. 불가능하면 -1. 예시: coins = [1, 5, 10], amount = 11 → 2 (10+1)

def coin_change(coins, amount):
    # dp[i] = 금액 i를 만드는 최소 동전 수
    dp = [float('inf')] * (amount + 1)
    dp[0] = 0  # 0원은 동전 0개
    
    for i in range(1, amount + 1):
        for coin in coins:
            if coin <= i:
                dp[i] = min(dp[i], dp[i - coin] + 1)
    
    return dp[amount] if dp[amount] != float('inf') else -1

키워드 '최소 개수' + '조합'DP. dp[i] = 금액 i의 최소 동전 수

LRU Cache를 O(1)에 구현하려면 어떤 자료구조 결합이 필요한가?

Number of Islands에서 DFS 대신 BFS를 써도 시간 복잡도는 같다

Medium 3문제 클리어!

edit_note

정리 노트

모의면접 2 — Medium 실전

문제별 핵심

LRU Cache
HashMap + 이중 연결 리스트 (OrderedDict)
Number of Islands
그리드 DFS — 방문 셀 '0' 변환
Coin Change
DP — dp[i] = 금액 i의 최소 동전 수

패턴 결합 공식

O(1) 조회+순서
HashMap + 연결 리스트
연결 영역 탐색
그래프 DFS/BFS
최소/최대 조합
DP (Bottom-Up)

Medium 3문제를 각각 20분 안에 풀 수 있으면 면접 합격 수준!

check_circle

핵심 정리

  • 1LRU Cache — 자료구조 결합 패턴
  • 2Number of Islands — 그래프 DFS 패턴
  • 3Coin Change — DP 패턴
  • 4Medium = Easy 패턴 2개의 결합

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작