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

모의면접 1 — Easy 3문제 실전

Two Sum, Valid Parentheses, Merge Two Sorted Lists를 면접 형식으로 풀어본다각 문제에 이해→설계→구현→검증 프레임워크를 적용한다

Easy라고 쉽게 보면 안 됩니다

Easy 문제도 면접에서 시간 내에, 설명하면서 풀어야 합니다. 집에서 10분 걸리던 문제가 면접장에서는 25분이 걸릴 수 있습니다.

Easy를 완벽하게 풀면 Medium도 자신감이 생기지 않을까?

지금부터 실전 면접 시뮬레이션을 시작합니다. 각 문제를 4단계로 풀어봅시다.

lightbulb

핵심 개념

Two Sum

배열에서 합이 target인 두 수의 인덱스를 찾는 문제

HashMap 패턴

보수(complement)를 해시맵에 저장하여 O(n)에 해결


article

핵심 내용

면접 시작 — 첫 번째 문제입니다. 45분 중 15분을 배분하세요

Two Sum 정수 배열 `nums`와 정수 `target`이 주어집니다. 합이 `target`인 두 수의 인덱스를 반환하세요. 예시: nums = [2, 7, 11, 15], target = 9 → [0, 1]

1단계: 이해 — 같은 원소를 두 번 사용할 수 있나요? → 아니요, 서로 다른 인덱스여야 합니다

2단계: 설계 — 브루트포스 O(n²) → HashMap O(n)으로 최적화

3단계: 구현 — HashMap으로 보수를 추적합니다

def two_sum(nums, target):
    # 숫자→인덱스 매핑
    seen = {}
    
    for i, num in enumerate(nums):
        complement = target - num
        
        # 보수가 이미 등장했으면 정답
        if complement in seen:
            return [seen[complement], i]
        
        # 현재 숫자 기록
        seen[num] = i
    
    return []  # 답이 없는 경우

4단계: 검증 — 시간 O(n), 공간 O(n). 엣지: 빈 배열 → [], 음수 포함 → 정상 동작

두 번째 문제입니다. 스택 패턴을 활용합니다

Valid Parentheses '(', ')', '{', '}', '[', ']' 로만 이루어진 문자열이 주어집니다. 괄호가 올바르게 닫혀있는지 판별하세요. 예시: "()[]{}" → True, "(]" → False

def is_valid(s):
    stack = []
    pairs = {')': '(', '}': '{', ']': '['}
    
    for char in s:
        if char in pairs:        # 닫는 괄호
            if not stack or stack[-1] != pairs[char]:
                return False
            stack.pop()
        else:                    # 여는 괄호
            stack.append(char)
    
    return len(stack) == 0       # 스택이 비어야 완전

키워드 '괄호 짝 맞추기' → 즉시 스택 떠올리기!

시간 O(n), 공간 O(n). 엣지: 빈 문자열 → True, 여는 괄호만 → False

세 번째 문제입니다. 연결 리스트 기본을 확인합니다

Merge Two Sorted Lists 정렬된 두 연결 리스트를 하나의 정렬된 리스트로 병합하세요. 예시: [1→2→4] + [1→3→4] → [1→1→2→3→4→4]

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def merge_two_lists(l1, l2):
    dummy = ListNode(0)  # 더미 헤드
    curr = dummy
    
    while l1 and l2:
        if l1.val <= l2.val:
            curr.next = l1
            l1 = l1.next
        else:
            curr.next = l2
            l2 = l2.next
        curr = curr.next
    
    # 남은 노드 연결
    curr.next = l1 if l1 else l2
    
    return dummy.next

더미 헤드 기법은 연결 리스트 문제의 필수 테크닉입니다

시간 O(n+m), 공간 O(1). 엣지: 한쪽이 비어있으면 → 다른 쪽 그대로 반환

Two Sum에서 HashMap을 쓰면 시간 복잡도는?

Valid Parentheses 문제에서 가장 적합한 자료구조는?

Easy 3문제 클리어!

edit_note

정리 노트

모의면접 1 — Easy 실전

문제별 핵심

Two Sum
HashMap으로 보수 추적 — O(n)
Valid Parentheses
스택으로 괄호 짝 맞추기 — O(n)
Merge Two Lists
더미 헤드 + 투 포인터 — O(n+m)

면접 팁

더미 헤드
연결 리스트 병합의 필수 테크닉
엣지 케이스
빈 입력, 단일 원소, 동일 값 항상 확인

Easy 3문제를 15분 안에 설명+구현할 수 있으면 면접 기본기 완성!

check_circle

핵심 정리

  • 1Two Sum — HashMap 패턴
  • 2Valid Parentheses — 스택 패턴
  • 3Merge Two Sorted Lists — 더미 헤드 패턴
  • 4모든 문제에 4단계 프레임워크 적용

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

play_circle인터랙티브 레슨 시작