몇 시간째 막히셨나요? LeetCode를 위한 ‘생산적인 고군분투’ 규칙

발행: (2025년 12월 13일 오후 03:21 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

원래는 LeetCopilot Blog 에서 게시되었습니다

스크린을 2시간 동안 바라보는 것은 끈기가 아니라 시간 낭비입니다. 여기서는 솔루션을 확인해야 할 시점을 위한 스킬 기반 시간 제한을 제시합니다.

당신은 이 문제를 90분째 바라보고 있습니다. 몇 가지 아이디어는 있지만 아무것도 작동하지 않습니다. “거의 다 왔는지” 아니면 “완전히 빗나갔는지” 확신이 서지 않습니다.

내부 논쟁

  • 옵션 1: “계속 시도해. 곧 알아낼 거야. 포기하는 건 약함이야.”
  • 옵션 2: “시간 낭비야. 솔루션을 보고 넘어가자.”

끈기와 효율성 사이에 마비된 상태입니다.

온라인 조언은 종종 쓸모 없습니다:

  • “절대 포기하지 마!” → 4시간 고생으로 이어짐
  • “15분 뒤에 보라” → 학습이 일어나지 않음
  • “상황에 따라 다르다” → 도움이 안 됨

진실: 적절한 시간은 있지만 수준, 문제 난이도, 목표에 따라 달라집니다. 이 가이드는 언제 지속하고 언제 넘어갈지에 대한 스킬 보정 프레임워크를 제공해 추측을 없앱니다.

TL;DR

  • 핵심 문제: 보편적인 시간 제한은 없으며, “생산적인 고군분투”(학습 중심)는 스킬 수준에 따라 30‑90분이 필요하고, “비생산적인 고군분투”(이해 없이 무작위 시도)는 시간에 관계없이 낭비됩니다.
  • 왜 중요한가: 솔루션을 너무 빨리 보면 스킬이 쌓이지 않고, 과도한 고군분투(예: 4시간 마라톤)는 번아웃을 초래하며 대부분 학습자에게는 ~90분 이후 수익이 감소합니다.
  • 프레임워크: 스킬 기반 시간 예산(초보자: 45‑60분, 중급: 30‑45분, 고급: 60‑90분)과 15/30/45분 간격 체크포인트를 결합해 의미 있는 진전이 있는지, 아니면 허우적거리는지 평가합니다.
  • 초보자 흔한 실수: “항상 30분” 같은 고정 시간 제한을 쓰는 것. 이는 Easy와 Hard 문제, 학습 vs 면접 준비 상황이 서로 다른 고군분투 시간을 요구한다는 점을 무시합니다.
  • 배우게 될 내용: 생산적 vs 비생산적 고군분투를 구분하는 진단 질문, 상황별 시간 제한(새 패턴 학습 vs 기존 패턴 연습) 그리고 점진적 힌트 시스템으로 전체 솔루션 대신 마이크로 힌트로 생산적인 고군분투를 연장하는 방법.

생산적 고군분투 vs 비생산적 고군분투 이해하기

생산적 고군분투

어떤 모습인가

  • 아이디어를 생성하고 테스트함
  • 각 시도가 새로운 정보를 제공함
  • 접근법이 왜 실패했는지 이해함
  • 문제를 아직 풀지 못했더라도 진전이 있음

예시

시간행동
15 분완전 탐색 시도, O(n²) 은 너무 느림을 인식
30 분해시맵 사용 시도, 엣지 케이스 문제 발견
45 분접근법 다듬기, 솔루션에 근접

이 고군분투는 스킬을 키웁니다.

비생산적 고군분투

어떤 모습인가

  • 같은 실패한 접근을 반복하며 성공을 기대함
  • 시도 사이에 새로운 통찰이 없음
  • 아이디어가 전혀 떠오르지 않는 완전한 정신적 차단
  • 학습 없이 좌절만 발생

예시

  • 15 분: 막힘
  • 30 분: 같은 문제에 여전히 막힘
  • 60 분: 화가 나고 진전 없음

이 고군분투는 시간을 낭비하고 원한을 키웁니다.

스킬 기반 시간 예산 프레임워크

완전 초보자 (< 20문제 해결)

  • 시간 예산: 최대 45‑60 분
  • 이유: 기본 개념을 배우는 단계이며 최적화가 목표가 아님; 가이드 없이 오래 고군분투하면 나쁜 습관이 형성될 수 있어 자주 검증이 필요합니다.

체크포인트

시간질문
15 분문제에서 요구하는 바를 이해했는가?
30 분어떤 접근이라도 코딩했는가(완전 탐색이라도 괜찮다)?
45 분진전이 있나, 아니면 허우적거리는가?

45분 시점 결정

  • 진전이 있다 → 60분까지 연장
  • 진전이 없다 → 힌트 보기(전체 솔루션 아님)
  • 힌트 후에도 막히면 → 솔루션을 보고 깊이 이해한 뒤 기억으로 다시 코딩

중급 코더 (20‑100문제 해결)

  • 시간 예산: Medium은 30‑45 분, Hard는 60‑90 분
  • 이유: 패턴을 빠르게 인식하고 알려진 접근을 신속히 구현할 수 있음; 어려운 개념은 더 오래 고민해도 좋음.

체크포인트

시간질문
15 분패턴/접근을 파악했는가?
30 분동작하는 코드를 작성했는가?
45 분 (Medium)최적화를 진행 중인가, 아니면 막혔는가?

45분 시점 결정

  • Medium 해결 → 넘어감
  • Medium 미해결 → 접근 힌트를 보고 다시 시도(≈15 분), 그래도 안 되면 솔루션 확인
  • Hard 미해결 → 허용 범위; 총 90분 후에 솔루션 확인

고급 (100문제 이상, 탄탄한 기반)

  • 시간 예산: 학습용 60‑90 분, 패턴 연습용 15‑30 분
  • 이유: 깊이 있는 문제 해결이 가능하고, 솔루션 탐구를 오래 할수록 이득이 큼; 패턴 강화는 짧은 시간에 진행.

체크포인트

시간질문
30 분여러 접근을 고려했는가?
60 분최적 솔루션을 찾았거나 근접했는가?
90 분수익 감소가 시작됐는가?

90분 시점 결정

  • 솔루션을 보라(근접해도 첫 접근이 충분히 좋을 수 있음).
  • 작동하는 해결책을 찾은 뒤 최적화를 공부하는 것이 완벽을 위해 오래 파고드는 것보다 학습 효율이 높음.

상황별 시간 제한

상황 1: 새로운 패턴 학습 (예: 슬라이딩 윈도우, DP)

  • 시간 예산: 60‑90 분
  • 전략
    1. 30 분: 스스로 시도
    2. 접근 설명을 확인(코드는 아님)
    3. 30 분: 구현
    4. 아직 막히면 솔루션을 보고 깊이 공부

상황 2: 익힌 패턴 연습

  • 시간 예산: 30‑45 분
  • 전략
    1. 15 분: 패턴 식별
    2. 30 분: 구현
    3. 막히면 구현 디테일 힌트를 제공, 전체 솔루션은 아님

상황 3: 면접 시뮬레이션

  • 시간 예산: Medium 15‑25 분, Hard 30‑40 분
  • 전략
    • 타이머를 엄격히 적용하고, 풀지 못해도 시간이 다하면 바로 넘어감
    • 이후 솔루션을 검토하고 “실패한 면접”을 기록해 기대치를 보정

상황 4: 복습 / 간격 반복

  • 시간 예산: 10‑20 분
  • 전략
    • 20분 안에 풀지 못하면 제대로 학습하지 못한 것
    • 솔루션을 보고 다시 코딩한 뒤, 다음 복습을 일정에 잡음

체크포인트 의사결정 트리

15분 시점

묻기: “문제가 요구하는 바를 이해했는가?”

  • ✅ 예 → 계속 진행
  • ❌ 아니오 → 문제를 다시 읽고, 예시와 제약조건을 확인
  • ❌❌ 여전히 모르면 → 문제 설명(솔루션 아님)을 확인

30분 시점

묻기: “작동하는 코드를 어떤 형태라도 작성했는가?”

  • ✅ 예, 완전 탐색이 동작 → 최적화하거나 넘어감
  • ⚠️ 예, 테스트 실패 → 약 15분 더 디버깅
  • ❌ 코드 없음 → 접근 힌트 보기

45분 시점 (초보자 / 중급)

묻기: “30분 때보다 해결에 더 가까워졌는가?”

  • ✅ 예, 진전 중 → 60분까지 연장
  • ❌ 아니오, 같은 지점 → 솔루션 보기
  • ⚠️ 좌절/분노 → 10분 휴식 후 재판단

60‑90분 시점 (고급)

묻기: “30분 더 하면 해결될까?”

  • ✅ 아마도, 버그 하나 남음 → 90분까지 진행
  • ❌ 명확한 길이 없음 → 솔루션 보기
  • ⚠️ 수익 감소 → 가까워도 지금 최적 솔루션을 공부하고, 완벽을 위해 오래 파고들지 않음

즉시 중단해야 할 빨간 신호

빨간 신호 1: 같은 실패 시도 반복

같은 방법을 3번 이상 시도했는데 새로운 통찰이 없으면 루프에 빠진 것.

조치: 힌트를 보거나 잠시 휴식.

빨간 신호 2: 감정적 고통

화가 나거나 절망감, 눈물이 날 지경이면 학습이 멈춘 상태.

조치: 당장 떠나기. 다음 날 새 정신으로 다시 시도.

Back to Blog

관련 글

더 보기 »

Day 3: 반성하고 추진하기

개요 첫 이틀은 기초를 다지는 데 집중했습니다: 3Blue1Brown의 벡터에 관한 두 개의 영상을 시청하고 LeetCode 문제 217, 242, 1, 347을 풀었습니다.