본문으로 바로가기
제품데스크톱 도구TASTECAD도면 확인TASTEFILES파일 관리TASTEFTP파일 전송TASTESSH원격 작업공간TASTEZIP압축과 해제개발 도구TASTECODERust 통합 개발 환경TASTESTUDIO통합 개발·테스트 환경TASTEETL데이터 통합(ETL)서버TASTEREMOTE원격 데스크톱 서버TASTEGEO공간정보 서버TASTEMAIL메일 작업공간시작하기다운로드문서구매모든 제품
마켓플레이스
소식
개발소식오늘의 개발 소식개발 문서프로그래밍 언어RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron알고리즘알고리즘 기초알고리즘 핵심알고리즘 심화실무 알고리즘
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스커뮤니티 안내
협업기술 전수홈페이지 구축데스크톱 앱 구축릴리스·결제 파이프라인판매 파트너문의
서비스원격 데스크톱설치 패키지 커스텀
TASTEDEV
제품

데스크톱 도구

TASTECAD복잡한 도면을 가볍게 열다TASTEFILES필요한 파일만, 가장 빠르게TASTEFTP파일이 오가는 가장 단정한 길TASTESSH서버와 나 사이, 더 단단한 연결TASTEZIP더 빠르게 묶고, 더 안전하게 풀다

개발 도구

TASTECODERust 앱을 편집 · 빌드 · 디버깅 · 테스트까지 한 창에서TASTESTUDIO편집부터 원격 테스트와 승인 기반 AI 수정까지TASTEETL값을 보며 데이터를 옮깁니다

서버

TASTEREMOTE우리 회사 서버로 운영하는 원격 데스크톱TASTEGEOGeoServer 호환 공간정보 서버를 Rust로 다시 세웁니다TASTEMAIL메일의 주도권을 다시 내 손에

시작하기

다운로드모든 제품 최신 판문서제품 사용법구매구독 · 영구 라이선스모든 제품모든 제품 한눈에
모든 제품
마켓플레이스소식
개발

소식

오늘의 개발 소식언어 · 프레임워크 · GitHub · AI 공식 발표개발 문서언어 · 프레임워크 · 알고리즘 안내서

프로그래밍 언어

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

프레임워크

프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular
서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express
앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron

알고리즘

알고리즘 기초복잡도 분석 · 정렬 · 탐색 · 기본 자료구조 · 트리와 힙알고리즘 핵심그래프 탐색 · 최단 경로와 최소 신장 트리 · 동적 계획법 · 탐욕 알고리즘 · 분할 정복 · 백트래킹알고리즘 심화문자열 알고리즘 · 수학과 정수론 · 비트 연산 · 구간 트리 · 유니온 파인드실무 알고리즘코딩 면접 풀이 전략 · LRU 캐시 · 레이트 리미터 · 일관된 해시
개발 문서 전체 보기
커뮤니티
프로젝트빌더와 작업 발견개발 로그결정과 시행착오프롬프트재사용 가능한 지시AI 도구 이슈Claude · Codex · Gemini 문제와 우회법쇼케이스완성된 결과커뮤니티 안내공개하고 함께 만드는 방식
협업
기술 전수Rust·egui 네이티브 앱 만들기홈페이지 구축10개 언어, 계정, 문서·다운로드데스크톱 앱 구축Rust·egui, WebView 없이릴리스·결제 파이프라인서명 · MSI·deb·rpm·AppImage · 해시판매 파트너소개하고 결제액의 30% 받기문의구축 · 제휴 · 투자 문의
서비스
원격 데스크톱브라우저로 내 컴퓨터에 접속설치 패키지 커스텀필요한 기능만, 설정은 미리
구매
KO
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
로그인
로그인
TASTEDEV

작은 도구부터, 더 좋은 개발까지.

support@tastedev.netTASTEDEV 후원하기
제품제품군구매문서다운로드마켓플레이스고객 지원
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스
정책개인정보처리방침이용약관구독 약관환불 정책커뮤니티 운영 정책
계정로그인가입하기
방문자
오늘
012345678901234567890123456789012345678901234567890123456789
어제
012345678901234567890123456789012345678901234567890123456789
누적 조회
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
상호
지엑스소프트
대표자
최영구
사업자등록번호
853-44-00368
주소
인천광역시 미추홀구 경인로 351 9층 V24
전화
+82-10-4404-1523
이메일
whitecalvin@tastedev.net
개인정보 보호책임자
최영구

© 2026 TASTEDEV제품 정보는 현재 검증된 개발 소스를 기준으로 합니다.출시·고도화 중

코딩 면접 풀이 전략 문서
코딩 면접 풀이 전략
코딩 면접의 개념문제 풀이 절차패턴 구현복잡도 설명과 트레이드오프패턴 연습 문제실전 준비와 시험 환경
토론

코딩 면접 풀이 전략 안내서 · 4/6

복잡도 설명과 트레이드오프

면접에서 복잡도는 계산만 맞으면 되는 것이 아니라 말로 설명할 수 있어야 합니다. "O(n)입니다"라는 한마디보다 "n이 무엇이고, 어떤 연산이 몇 번 일어나서 그렇다"는 설명이 훨씬 설득력 있습니다. 이 장에서는 복잡도를 소리 내어 설명하는 방법, 입력 크기로 목표 복잡도를 가늠하는 법, 풀이 사이의 트레이드오프를 다룹니다.

소리 내어 설명하는 순서

복잡도를 말할 때는 다음 세 가지를 차례로 밝힙니다.

  1. 변수 정의: "n은 배열 길이, m은 질의 개수입니다"처럼 무엇을 기준으로 세는지 먼저 말합니다.
  2. 지배적인 연산: "바깥 반복이 n번, 안에서 해시 맵 조회가 평균 O(1)입니다"처럼 가장 많이 일어나는 일을 짚습니다.
  3. 공간: 입력을 제외한 추가 메모리를 말합니다. 재귀라면 호출 스택 깊이도 포함합니다.

예를 들어 앞 장의 중복 없는 가장 긴 구간 풀이는 이렇게 설명합니다. "n은 문자열 길이입니다. right는 n번 움직이고, left는 앞으로만 움직이므로 전체 이동도 n번 이하입니다. 각 단계의 딕셔너리 조회와 갱신은 평균 O(1)이므로 시간은 O(n)입니다. 딕셔너리에는 서로 다른 문자만 들어가므로 공간은 O(min(n, σ))입니다."

입력 크기로 목표 복잡도 가늠하기

제약 조건은 출제자가 기대하는 복잡도를 알려 주는 힌트입니다. 컴파일 언어는 1초에 대략 10⁸번 안팎의 단순 연산을, Python은 그보다 수십 배 적은 연산을 처리한다고 보면 어림잡기 좋습니다. 정확한 수치는 환경마다 다르므로 자릿수만 참고합니다.

n의 크기대체로 통하는 복잡도떠올릴 방법
10 안팎O(n!)순열 백트래킹
20 안팎O(2ⁿ)부분 집합, 비트마스크
500 안팎O(n³)3중 반복, 구간 동적 계획법
5,000 안팎O(n²)2중 반복, 2차원 동적 계획법
10⁵ ~ 10⁶O(n log n), O(n)정렬, 힙, 투 포인터, 해시 맵
그보다 큼O(log n), O(1)이분 탐색, 수식

같은 문제, 세 가지 풀이

"배열에 합이 target인 두 수가 있는가"를 세 가지로 풀어 보고 비교합니다.

def has_pair_brute(nums: list[int], target: int) -> bool:
    # O(n²) 시간, O(1) 추가 공간
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return True
    return False


def has_pair_sorted(nums: list[int], target: int) -> bool:
    # O(n log n) 시간, 정렬 사본 O(n) 공간(제자리 정렬이면 추가 공간이 거의 없다)
    arr = sorted(nums)
    lo, hi = 0, len(arr) - 1
    while lo < hi:
        total = arr[lo] + arr[hi]
        if total == target:
            return True
        lo, hi = (lo + 1, hi) if total < target else (lo, hi - 1)
    return False


def has_pair_hash(nums: list[int], target: int) -> bool:
    # O(n) 평균 시간, O(n) 공간
    seen: set[int] = set()
    for x in nums:
        if target - x in seen:
            return True
        seen.add(x)
    return False


for f in (has_pair_brute, has_pair_sorted, has_pair_hash):
    print(f.__name__, f([4, 7, 1, 9], 10), f([4, 7, 1, 9], 2))
풀이시간추가 공간원래 인덱스 유지이런 때 고른다
2중 반복O(n²)O(1)예n이 아주 작거나 정답 확인용
정렬 + 투 포인터O(n log n)O(1) ~ O(n)아니요메모리가 빠듯하거나 이미 정렬됨
해시 집합평균 O(n)O(n)예(맵을 쓰면)가장 빠른 평균 시간이 필요할 때

면접관이 "메모리를 O(1)로 줄일 수 있나요?"라고 물으면, 해시 집합에서 정렬 + 투 포인터로 바꾸는 트레이드오프를 설명하면 됩니다. 해시 테이블은 평균 O(1)이지만 최악에는 충돌 때문에 느려질 수 있다는 점도 함께 언급하면 정확합니다.

반복문이 겹쳐도 O(n)인 경우

슬라이딩 윈도우는 for 안에 while이 있어 O(n²)처럼 보이지만, 안쪽 while이 움직이는 left는 전체 실행 동안 최대 n번만 증가합니다. 이렇게 전체 작업량을 합산해 평균을 내는 방법을 분할 상환 분석이라고 합니다. 직접 세어 보면 분명해집니다.

def count_moves(nums: list[int], target: int) -> tuple[int, int]:
    left = total = 0
    right_moves = left_moves = 0
    for value in nums:
        right_moves += 1
        total += value
        while total >= target:
            total -= nums[left]
            left += 1
            left_moves += 1
    return right_moves, left_moves


print(count_moves([1] * 1000, 3))  # (1000, 998): 두 포인터 합쳐 2n 이하

Python에서 숨은 비용

복잡도 분석이 맞아도 언어의 연산 비용을 잘못 알면 느린 코드가 됩니다. 다음은 자주 틀리는 예입니다.

from collections import deque

items = list(range(10))

# list.pop(0)은 뒤의 원소를 모두 당기므로 O(n)이다
queue = deque(items)
first = queue.popleft()          # deque는 양 끝 연산이 O(1)

# 리스트에서 in은 O(n), 집합에서 in은 평균 O(1)
lookup = set(items)
print(7 in lookup)

# 슬라이싱은 길이만큼 복사한다: nums[i:j]는 O(j - i)
window_sum = sum(items[2:5])

# 문자열을 반복해서 +=로 붙이면 느려질 수 있으니 join을 쓴다
text = "".join(str(x) for x in items)
print(first, window_sum, text)

정리

복잡도는 변수 정의, 지배적인 연산, 추가 공간 순서로 말합니다. 제약 조건에서 목표 복잡도를 거꾸로 추정하면 어떤 패턴을 써야 할지 빨리 좁힐 수 있습니다. 같은 문제에도 시간과 공간을 맞바꾸는 여러 풀이가 있으므로, 하나를 고른 이유와 다른 선택지를 함께 설명할 수 있어야 합니다.

이 장에 대해 질문이 있나요?
이전 장패턴 구현다음 장패턴 연습 문제

댓글 0개

인기 댓글순최신순

로그인 · 로그인하면 댓글을 남길 수 있습니다.