LeetCode를 외우지 않고 연습하는 방법

발행: (2025년 12월 20일 오전 05:26 GMT+9)
16 min read
원문: Dev.to

Source: Dev.to

LeetCode를 외우지 않고 연습하는 방법

LeetCode 문제를 풀 때 정답을 외우는 것보다 문제 해결 능력을 키우는 것이 훨씬 더 중요합니다. 아래에서는 답안을 외우지 않고도 효과적으로 연습할 수 있는 단계별 전략을 소개합니다.

1. 문제를 완전히 이해하기

  • 조건을 꼼꼼히 읽는다: 입력, 출력, 제약 조건을 모두 파악합니다.
  • 예시를 직접 손으로 풀어본다: 작은 입력값을 가지고 직접 계산해 보면서 흐름을 확인합니다.
  • 핵심 질문을 만든다: “이 문제에서 어떤 정보를 활용할 수 있을까?”, “어떤 경우에 답이 변할까?” 같은 질문을 스스로에게 던져봅니다.

2. 직접 풀이를 시도해 보기

  1. 브루트 포스부터 시작
    가장 직관적인 방법을 코드로 구현해 보세요. 비효율적이더라도 문제를 이해하는 데 큰 도움이 됩니다.

  2. 시간·공간 복잡도를 분석
    브루트 포스가 왜 비효율적인지, 어떤 부분에서 최적화가 가능한지 스스로 설명해 보세요.

  3. 점진적인 개선

    • 자료구조 교체 (예: 배열 → 해시맵)
    • 알고리즘 전환 (예: 완전 탐색 → 이진 탐색, DP)
    • 불필요한 연산 제거

3. 기존 풀이와 비교하기 (하지만 그대로 복사하지 않기)

  • 다른 사람의 풀이를 읽을 때:

    • 어떤 아이디어가 새로웠는지 기록합니다.
    • 왜 그 아이디어가 효율적인지 스스로 설명해 보세요.
  • 핵심 로직만 추출: 코드를 그대로 복사하지 말고, 핵심 알고리즘을 자신의 말로 요약합니다.

4. 코드 리팩터링 및 최적화

  • 가독성을 높이기: 변수명, 함수명, 주석을 명확하게 작성합니다.
  • 시간·공간 복잡도 다시 확인: 최적화된 풀이가 실제로 더 나은 복잡도를 갖는지 증명합니다.
  • 테스트 케이스 추가: 가장자리 경우(edge case)와 큰 입력을 직접 만들어 검증합니다.

5. 패턴을 체계화하기

문제 유형주요 아이디어대표 알고리즘
배열/문자열슬라이딩 윈도우두 포인터
트리DFS/BFS 순회재귀·스택
그래프최단 경로Dijkstra, BFS
DP부분 문제 정의메모이제이션·탭ulation
비트 연산비트 마스크XOR, 비트 셋팅
  • 노트에 정리: 새로운 유형을 만나면 위 표에 추가하고, 핵심 아이디어를 한 줄로 요약합니다.

6. 복습과 반복 연습

  1. 시간 간격을 두고 다시 풀어보기: 1주일, 1개월 후에 같은 문제를 다시 시도해 보세요.
  2. 유사 문제 찾기: 같은 패턴을 가진 다른 LeetCode 문제를 찾아 풀어봅니다.
  3. 스스로 퀴즈 만들기: “이 문제를 O(N)으로 풀려면 어떤 자료구조가 필요할까?” 같은 질문을 만들어 답해 봅니다.

7. 커뮤니티 활용 (하지만 답을 그대로 복사하지 않기)

  • 디스커션: 다른 사람들의 접근 방식을 읽고, “왜 이렇게 생각했을까?”를 고민합니다.
  • 코드 리뷰: 자신의 풀이를 공유하고 피드백을 받아 개선점을 찾습니다.

마무리

  • **핵심은 ‘이해’와 ‘응용’**입니다. 답을 외우는 대신 문제를 어떻게 접근하고, 어떤 알고리즘을 선택했는지를 명확히 하는 것이 장기적인 실력 향상에 도움이 됩니다.
  • 꾸준한 연습패턴 정리를 통해 자연스럽게 문제 해결 속도가 빨라지고, 새로운 유형도 자신감 있게 맞설 수 있게 됩니다.

Tip: 매일 1~2문제씩 풀고, 주말에 그 주에 푼 문제들을 복습하면 기억이 오래 남습니다. Happy coding!

암기에서 벗어나 전이 가능한 스킬을 키우세요

“패턴을 외우는 데만 급급하고 배우지는 못한다는 고민이 있나요? 이 의도적인 연습 프레임워크를 활용해 새로운 문제에도 적용할 수 있는 실제 문제 해결 능력을 키우세요.”

  • “Two Sum”을 해결합니다. 기분이 좋습니다.
  • 일주일 뒤, “Three Sum”을 마주합니다. 몸이 굳어집니다.
    “잠깐, 이거 ‘Two Sum’과 비슷하지 않나요? 그런데 그때 어떻게 풀었는지 기억이 안 나요…”

그것이 바로 memorization trap — 플래시카드처럼 해답을 저장해 두는 것이 아니라, 새로운 문제를 해결할 수 있게 해주는 정신 모델을 구축하지 못하는 상황입니다.

암기 vs. 패턴 인식

암기패턴 인식
취약 – 이전에 본 문제만 해결할 수 있음.견고 – 익숙한 전략을 새로운 상황에 적용할 수 있음.

전환:
“답이 뭐야?” 라는 질문을 멈추고 → “이 문제는 어떤 유형에 속하는가?” 라는 질문을 시작하라.

의도적 연습 루프

  1. 해결 문제를 풀어라.
  2. 기다려라 3‑7일.
  3. 다시 처음부터 해결 (노트 없이, 코드 없이).
  4. 패턴을 설명해라 자신의 말로.

플래시카드 시스템과 같은 간격 반복을 사용하되, 문제 유형에 대해 사용하고, 코드 스니펫이 아니라.

왜 200개의 풀이된 문제가 충분하지 않은가

LeetCode 프로필을 보고 뿌듯해하지만, 면접에서 완전히 새로운 문제를 내놓는다. 당황한다.

왜? 당신은 “이 배열 문제는 해시 맵을 사용한다” 라고 외웠을 뿐, 해시 맵이 기본 패턴을 해결하는 이유를 이해하지 못했다.

실제 학습은 이렇게 진행된다

  1. 문제 유형을 식별한다 (예: “슬라이딩‑윈도우”).
  2. 핵심 전략을 떠올린다 (예: “조건이 맞지 않을 때 오른쪽을 확장하고, 왼쪽을 축소한다”).
  3. 전략을 새로운 문제의 구체적인 제약에 맞게 적용한다.

단계별 워크플로우

  1. 문제 이해Problem Comprehension 가이드를 참고하세요.

  2. 패턴 식별 – 다음과 같이 질문하세요: “이것은 어떤 카테고리인가? 투 포인터? DFS? DP?”

  3. 솔루션 구현.

  4. 필요하면 최적화.

  5. 생각 과정을 문서화 (2‑3문장):

    “연속된 부분 배열이 필요하기 때문에 이것은 슬라이딩 윈도우 문제입니다.”
    “나는 O(1) 시간에 빈도를 추적하기 위해 해시 맵을 사용했습니다.”

지연 재해결의 힘

  • 오늘 그리고 내일 다시 푸는 것은 단기 기억만 테스트합니다.
  • 3‑7일 기다리세요. 뇌가 세부 사항을 잊게 하세요; 논리를 다시 구성해야 합니다.

기다린 후

  1. 모든 메모를 닫으세요.

  2. 이전 코드를 보지 않고 다시 풀어보세요.

  3. 고군분투를 받아들이세요 – 20 분의 노력 = 더 깊은 학습.

  4. 막히면 패턴 메모(코드는 아님)를 살짝 보고, 그 후 마무리하세요.

  5. 말로 표현하세요:

    “이 문제는 [pattern name] 패밀리의 일부입니다, 왜냐하면 [signal] 때문입니다.
    일반적인 전략은 [high‑level approach] 입니다.
    이번 경우에는 [specific tweak] 로 조정했습니다.”

명확하게 설명할 수 없다면, 아직 완전히 이해한 것이 아닙니다.

Build a Pattern Library (instead of a code‑snippet stash)

Example: Sliding Window

언제 사용하나요키워드핵심 전략
연속 부분 배열/문자열 문제“longest”, “shortest”, “at most K”두 포인터(왼쪽, 오른쪽). 오른쪽을 확장해 윈도우를 늘리고, 조건이 깨지면 왼쪽을 축소합니다.

변형

  • 고정 윈도우 크기 – 예: 크기 K인 부분 배열의 최대 합.
  • 가변 윈도우 크기 – 예: 중복 문자 없이 가장 긴 문자열.

Example problems

  • Longest Substring Without Repeating Characters
  • Max Consecutive Ones III

새로운 슬라이딩‑윈도우 문제가 나타날 때, 코드를 외우는 대신 템플릿을 적용하여 새로운 제약에 맞춥니다.

Flash‑card style

  • 앞면: “최대 K개의 서로 다른 요소를 가진 가장 긴 부분 배열을 찾아야 합니다. 어떤 패턴인가요?”
  • 뒷면: “빈도수를 추적하기 위한 해시 맵을 이용한 슬라이딩 윈도우.”

간격‑반복 일정

DayAction
1문제를 풉니다.
4기억을 바탕으로 다시 풉니다.
11다시 한 번 풉니다.
30최종 재풀이 – 노트 없이 성공하면 장기 기억에 저장됩니다.

LeetCopilotStudy Mode와 같은 도구는 간격‑반복 알고리즘을 기반으로 리뷰를 자동으로 일정에 맞춰 잡아줍니다.

Common Pitfalls & Fixes

함정해결책
5 분 정도 막히고 바로 해설을 확인한다.20‑30 분 타이머를 설정한다. 정말 막히면 힌트(전체 풀이 아님)를 보고 다시 시도한다.
연속으로 10개의 “Two Pointers” 문제를 풀면 자동조종.문제 유형을 섞는다(DP, 그래프, two‑pointers 등)하여 컨텍스트 전환을 강제한다.
한 번 풀고 한 달 뒤에 잊는다.단어 암기 복습처럼 재풀이 일정을 잡는다.
코드를 고쳐서 통과시키지만 왜 그런지 이해하지 못한다.“Accepted” 후, 상단에 간단한 영어 설명을 주석으로 달아 접근 방식을 기록한다.

무엇이 더 중요한가

  • 10가지 패턴에 걸쳐 50문제를 깊이 이해하고, 각 문제를 3번씩 다시 풀어 각 패턴을 명확히 설명할 수 있다.
  • vs. 300문제를 겉핍게 풀고, 한 번도 다시 보지 않으며, 약간의 변형만 있어도 당황한다.

FAQ

Q: 문제를 몇 번 다시 풀어야 하나요?
A: 최소 2‑3번.

  • 첫 번째 재‑풀이 (3‑7 일) → 기억 유지 테스트.
  • 두 번째 재‑풀이 (2‑4 주) → 장기 기억 테스트.

Q: 다른 사람의 풀이를 봐도 될까요?
A: 네, 하지만 문제에 충분히 노력한 뒤에만 가능합니다. 최적 풀이를 공부하면 새로운 기법을 배울 수 있지만, 고군분투 과정을 건너뛰면 목적이 사라집니다.

Q: 재‑풀이 중에 모든 것을 다 잊어버리면 어떡하나요?
A: 바로 좋은 기회! 잊어버림 → 고군분투 → 재학습 = 깊은 기억.

Q: LeetCopilot 같은 AI 도구를 “부정행위 없이” 사용할 수 있나요?
A: 물론입니다, 전략적으로 활용한다면 가능합니다.

  • 힌트패턴 식별을 요청하세요. 예: “이 문제에 어떤 자료구조를 고려하면 좋을까요?”
  • 전체 풀이를 바로 요청하는 것은 피하세요.

요약

깊은 이해 + 간격을 둔 반복 연습 = 전이 가능한 문제 해결 능력.
코드를 외우는 것을 멈추고 패턴을 마스터하세요. 🚀

**Q: How do I know if I've truly learned a pattern?**

**A:**  
- Can you solve a new problem in that pattern without notes?  
- Can you explain the pattern to someone else?  

If the answer is **yes** to both, you've learned it.

왜 암기가 함정인가

암기는 생산적으로 느껴지지만 압박이 가해지면 무너집니다.

진정한 학습은 다음으로 구성됩니다

  • 코드를 외우는 것이 아니라 패턴을 식별하는 것.
  • 간격 반복을 사용해 지식을 장기 기억으로 옮기는 것.
  • 자신의 사고 과정을 큰 소리로 설명하는 것.
  • 의도적인 간격을 두고 문제를 다시 푸는 것.

*“이 특정 문제를 어떻게 풀지?”*에서 *“이 문제가 어떤 카테고리에 속하고, 일반 전략을 어떻게 적용할지?”*로 사고가 전환될 때, LeetCode는 고된 작업이 아니라 스킬을 키우는 시스템이 됩니다.


LeetCode 패턴을 마스터하고 코딩 인터뷰에서 성공하고 싶은 AI 도우미를 찾고 계신가요?
**LeetCopilot**을 확인해 보세요.

Back to Blog

관련 글

더 보기 »