개요 왜 성능? Big-O 대표 복잡도 계산 규칙 📝 문제풀이
◀ 이전 📋 목차 CH 02 ▶
🧩 CHAPTER 01 · 개요

같은 문제도, 방법에 따라 속도가 다르다

코드를 짜기 전에, "이 방법이 얼마나 빠른가"를 재는 눈을 먼저 기르면 코테가 쉬워져요. 이번 장은 그 자(尺)인 시간복잡도(Big-O)를 큰 그림으로 잡습니다.

🎯 이 장을 끝내면
📖
개요
자료구조와 알고리즘이 뭔가요?
한 문장으로 먼저 잡고, 천천히 풀어볼게요.
🧩 자료구조 = 그릇, 알고리즘 = 방법 자료구조(Data Structure) — 데이터를 어떻게 담고 관리할지를 정한 방식이에요. 배열·스택·큐·해시·트리 등이 있고, 각자 잘하는 일이 달라요.
알고리즘(Algorithm) — 문제를 푸는 절차·방법이에요. 정렬·탐색·재귀 같은 것들이죠. 💡 요리로 치면 자료구조는 재료를 담는 그릇, 알고리즘은 조리법이에요. 좋은 그릇과 좋은 조리법을 고르는 게 이 과목의 핵심이에요.
시간복잡도 Big-O O(1) O(log n) O(n) O(n log n) O(n²) 코딩테스트
🧭
이 코스의 예시 언어. 코드 예시는 브라우저에서 바로 실행되는 JavaScript로 보여드려요. 하지만 알고리즘의 논리는 자바·파이썬 등 어떤 언어에도 똑같이 통해요. 필요하면 자바와의 차이도 짚어드릴게요.
왜 성능?
같은 답, 다른 속도
1부터 n까지의 합을 구하는 두 가지 방법으로 느껴봐요.

1부터 n까지 더하기를 두 방법으로 해볼게요. 결과는 같지만 일하는 양이 완전히 달라요.

🐢 방법 A — 하나씩 다 더하기
function sumA(n) {
  let total = 0;
  for (let i = 1; i <= n; i++) {  // n번 반복
    total += i;
  }
  return total;
}
n이 100만이면 100만 번 더해요. n에 비례해서 일이 늘어요 → O(n).
🐇 방법 B — 공식으로 한 방에
function sumB(n) {
  return n * (n + 1) / 2;   // 반복 없이 계산 한 번
}
n이 아무리 커도 계산 한 번이면 끝나요 → O(1). 💡 같은 정답인데, n이 커질수록 방법 B가 압도적으로 빨라요. 이렇게 "방법의 효율"을 재는 자가 바로 시간복잡도예요.
📐
Big-O
Big-O는 "입력이 커질 때의 증가 추세"를 재요
정확한 초 단위가 아니라, 커질수록 얼마나 가팔라지는지를 봐요.

Big-O 표기법은 입력 크기 n이 커질 때 연산 횟수가 얼마나 빠르게 늘어나는지를 나타내요. O(n)은 "입력에 비례해서 늘어난다", O(1)은 "입력과 무관하게 일정하다"는 뜻이에요.

🔤
시간복잡도(Time Complexity) — 어떤 방법이 일을 끝내기까지 필요한 연산 횟수가 입력 크기에 따라 얼마나 늘어나는지를 재는 자예요. 실제로 걸린 초가 아니라 "해야 할 일의 양"을 봐요. 그래서 컴퓨터가 빠르든 느리든 방법 자체의 효율을 비교할 수 있어요.
🔤
빅오(Big-O) — 시간복잡도를 적는 표기법이에요. O(n)O는 "대략 이 정도 규모(Order)"라는 뜻으로, 입력이 2배가 되면 일이 몇 배로 느는지를 한눈에 보여줘요. 예를 들어 O(n)은 입력 2배 → 일도 2배, O(n²)은 입력 2배 → 일이 4배예요.
🔤
공간복잡도(Space Complexity) — 시간이 아니라 추가로 쓰는 메모리(저장 공간)가 입력 크기에 따라 얼마나 늘어나는지를 같은 방식으로 재는 거예요. 시간을 아끼려고 메모리를 더 쓰기도 해서, 둘은 자주 맞바꿔져요.
🎯 세 가지 약속 1. 큰 흐름만 본다 — 컴퓨터·언어마다 실제 속도는 다르니, "커질수록 어떤 곡선을 그리나"라는 추세만 봐요.
2. 최악의 경우 기준 — 보통 가장 나쁜 상황(worst case)을 기준으로 표기해요. (배열에서 찾는 값이 맨 끝에 있을 때 등)
3. 상수·낮은 항은 버린다O(2n + 3)은 그냥 O(n). n이 커지면 가장 빨리 자라는 항만 중요해요.
📊
대표 복잡도
이 다섯 개만 감으로 잡아도 충분해요
빠른 것부터 느린 것 순서로.
복잡도뜻 (n이 커질 때)예시
O(1) 상수입력과 상관없이 일정배열 인덱스 접근 arr[5], 해시 조회
O(log n) 로그절반씩 줄이며 처리 (아주 느리게 증가)이진 탐색
O(n) 선형입력에 비례배열 전체 한 번 순회
O(n log n)선형보다 조금 더효율적 정렬(병합·퀵)
O(n²) 제곱이중 반복 (급격히 증가)모든 쌍 비교, 버블 정렬
🔤
인덱스(index) — 배열에서 각 칸에 매겨진 번호예요. 0부터 시작해서 arr[0]는 첫 칸, arr[5]는 여섯 번째 칸이죠. 번호만 알면 그 칸으로 바로 갈 수 있어서 접근이 O(1)이에요.
🔤
로그 시간 O(log n) — 후보를 매번 절반으로 접어 나가는 방식이에요. 그래서 아주 천천히 늘어요 — 1,024개도 약 10번, 100만 개도 약 20번이면 끝나요. 입력이 2배가 돼도 딱 한 단계만 더 늘어난다고 보면 돼요.
💡
느낌으로: n=1,000,000일 때 O(log n)은 약 20번, O(n)은 100만 번, O(n²)1조 번이에요. 그래서 코테에선 O(n²)이 시간 초과의 단골 원인이에요.
🖼️ 그림으로 보기 — Big-O 성장 비교
O(1) 거의 안 늘어남 O(log n) 아주 천천히 O(n) 비례해서 증가 O(n²) 급격히 증가
입력 n이 커질수록 벌어지는 정도가 복잡도예요. O(1)·O(log n)은 거의 안 늘고, O(n²)은 급격히 늘어요.
🧮
계산 규칙
복잡도, 이렇게 읽어요
간단한 규칙 두 개면 대부분 판단할 수 있어요.
📏 규칙 1 — 반복문을 보면 감이 와요 반복문 한 개(n번 돌면) → O(n)
중첩 반복문 두 개(n × n) → O(n²)
반복 없이 계산/접근O(1)
절반씩 줄이는 구조O(log n)
📏 규칙 2 — 상수와 계수는 버려요 O(2n + 3)O(n) · O(n² + n)O(n²) n이 아주 커지면 가장 빨리 자라는 항만 결과를 좌우해요. 그래서 상수·계수·낮은 차수는 무시해요.
🧪
이 과목의 실습 랩에서 지금 배운 개념으로 직접 함수를 짜고 실행·채점해볼 수 있어요. 상단 🧪 실습 버튼에서 열려요. 개념을 읽고 손으로 짜보면 훨씬 오래 남아요.
🧠 이 장 핵심 요약
📝
문제풀이 · 점검
배운 걸 가볍게 점검해봐요
시험이 아니라 "내가 이해했나" 확인용이에요. 틀려도 바로 해설이 나와요.
🧪
문제를 풀면 즉시 정답과 해설이 나오고, 위쪽 바에 점수가 쌓여요. 손으로 직접 짜보고 싶으면 상단 🧪 실습 랩으로!
CH 02 📦 배열과 문자열 — 인덱스 접근 O(1)과, 탐색·삽입의 진짜 비용