왜 “Easy / Medium / Hard”가 DSA를 생각하는 데 끔찍한 방법인가
Source: Dev.to
DSA에 대해 가장 오해를 불러일으키는 것 중 하나는 난이도 라벨입니다.
Easy.
Medium.
Hard.
보기에 유용해 보이고, 객관적인 것처럼 느껴집니다. 하지만 시간이 지나면서, 특히 실력을 향상시키려고 할 때는 이것이 도움이 되기보다 해를 끼치는 경우가 더 많다는 것을 알게 되었습니다.
난이도가 무작위처럼 느껴지는 이유
이런 느낌을 받은 적이 있다면, 당신만 그런 것이 아닙니다:
- 어떤 “쉬운” 문제는 불가능하게 느껴지고
- 어떤 “어려운” 문제는 바로 이해가 됩니다
- 어느 날은 중간 난이도를 풀고, 다음 날은 또 다른 문제에 어려움을 겪습니다
처음엔 자신을 탓하기 쉽습니다. 일관성이 없다고 생각할 수도 있고, DSA에 능숙하지 않다고 생각할 수도 있습니다. 하지만 문제는 당신이 아니라 라벨에 있습니다.
Difficulty isn’t about complexity
대부분의 사람들은 난이도가 다음을 의미한다고 생각합니다:
- 더 어려운 수학
- 더 까다로운 코드
- 더 영리한 아이디어
이는 거의 사실이 아닙니다. 실제로 난이도는 주로 몇 개의 패턴이 포함되어 있는지, 그리고 그것들이 얼마나 깔끔하게 결합되는지를 반영합니다.
제 경험에 따르면:
- 쉬운 문제는 보통 하나의 패턴을 테스트합니다
- 중간 난이도 문제는 하나 또는 두 개의 패턴을 결합합니다
- 어려운 문제는 보통 두 개, 가끔은 세 개의 패턴을 사용합니다
그 이상은 거의 없으며, 이를 알게 되면 라벨의 힘이 약해집니다.
왜 “쉬운” 문제들이 어려워 보일 수 있는가
“쉬운” 문제는 다음과 같은 경우에 어려워 보입니다:
- 아직 그 특정 패턴을 완전히 익히지 못했을 때
- 문제에서 이야기를 통해 패턴을 감추고 있을 때
- 불변식이 즉시 명확하지 않을 때
문제가 쉬운 이유는 복잡해서가 아니라, 패턴을 인식하면 해결 방법이 직관적이기 때문입니다. 그 인식이 없으면, 심지어 쉬운 문제도 고통스럽게 느껴집니다.
왜 “hard” 문제들이 때때로 쉬워 보이는가
반대로, 어려운 문제도 다음과 같은 경우에는 놀라울 정도로 다루기 쉬워 보일 수 있습니다:
- 이전에 기본 패턴을 본 적이 있을 때
- 그 조합이 당신에게 의미가 있을 때
- 불변량에 대해 독립적으로 추론할 수 있을 때
그 순간 당신은 “어려운” 문제를 푸는 것이 아니라 익숙한 아이디어들을 조정하고 있는 것입니다. 라벨은 더 이상 당신의 경험을 반영하지 않으며, 당신의 준비가 반영됩니다.
난이도는 주관적이며, 패턴은 그렇지 않다
이것은 누군가가 미리 알려줬으면 하는 부분입니다.
난이도 라벨은:
- 주관적
- 상대적
- 인기도와 플랫폼 휴리스틱에 영향을 받음
패턴은:
- 안정적
- 재사용 가능
- 문제와 기업을 넘어 전이 가능
패턴에 집중하면 진행 상황을 측정할 수 있게 됩니다. 난이도에 집중하면 잡음이 많고 일관성이 없어 보입니다.
이제 나는 문제에 접근하는 방법
나는 묻지 않는다:
“이 문제가 어려운가요?”
나는 묻는다:
- 이 문제에 몇 개의 패턴이 포함되어 있는가?
- 각각의 패턴을 이미 이해하고 있는가?
- 패턴들이 상호작용하는가, 아니면 순차적인가?
그러한 프레이밍은 모호한 것을 구체적으로 만든다. “어려운” 문제는 다음과 같이 변한다:
“이미 알고 있는 두 패턴이 약간 어색하게 결합된 경우.”
그것은 작업하기에 훨씬 덜 무서운 문제이다.
왜 이것이 학습에 중요한가
If you let difficulty labels drive your learning:
- you avoid “hard” problems too early
- you overvalue “easy” problems for too long
- you tie progress to external tags instead of internal clarity
If you let patterns drive your learning:
- you know exactly what you’re weak at
- you know what to practice next
- progress feels intentional, not accidental
That difference compounds over time.
이것도 인터뷰가 진행되는 방식
인터뷰어는 “이 문제는 어려워” 라는 식으로 생각하지 않는다. 대신 다음을 고려한다:
- 어떤 개념을 테스트하는가?
- 지원자가 구조를 인식할 수 있는가?
- 제약 조건을 명확히 추론할 수 있는가?
난이도 라벨은 플랫폼을 위한 것이고, 패턴이 바로 인터뷰에서 실제로 평가되는 요소이다.
내가 이걸 통해 가고자 하는 방향
이 사고 방식—패턴을 먼저, 라벨을 나중에 두는—은 내가 스스로 배우는 과정과 내가 만들고 있는 것들에서 명확히 하려고 하는 부분이다. “어렵다”는 두려움을 버리고 구조를 해부하기 시작하면, DSA는 훨씬 차분해진다. 여전히 도전적이지만, 더 이상 위협적으로 느껴지지는 않는다.
다음에 올 내용
다음 글에서는 배열만 마스터하는 것이 대부분의 사람들이 기대하는 것보다 훨씬 더 큰 도움이 되는 이유와, 배열이 거대한 DSA(자료 구조와 알고리즘) 영역 아래에서 조용히 자리하고 있는 이유에 대해 다루고 싶습니다.
난이도 라벨이 자신감을 흔들어 놓았다면, 잠시 무시해 보세요. 대신 패턴에 집중하세요. 모든 것이 달라집니다.
저는 패턴과 그 패턴을 가리키는 신호들을 한 곳에 정리해 두고 있습니다: indexedcode. 주로 제 자신을 위한 참고용이죠. 여기서 이를 글로 쓰는 것이 제 사고를 다듬는 데 도움이 됩니다.
