수년간 배워온 DSA와 수학에 대한 생각
Source: Dev.to
소개
요즘 어떤 생각을 많이 하고 있는데, 아직 완전히 정리된 건 아니라서 조언이라기보다 생각을 소리 내어 하는 느낌이에요.
인터뷰가 다가올 때마다 Striver’s sheet를 다시 꺼내서 처음부터 다시 시작합니다. 이미 풀어본 문제들을 다시 풀어보죠. 풀면서 “아, 이건 이미 알아” 하는데, 몇 주가 지나면 기억이 사라집니다. 코드뿐 아니라 접근 방식까지도요. 그래서 다시 처음부터 시작하게 됩니다.
제 경우 문제는 DSA를 배우는 방식에 있다고 생각해요. 매우 패턴 중심이죠:
- 이건 슬라이딩 윈도우
- 이건 프리픽스 합
- 이건 투 포인터
그 전체 게임은 다음과 같습니다:
“문제에서 이 패턴을 인식할 수 있겠는가?”
하지만 문제가 조금이라도 변형되면 뇌가 바로 “아니야 👍” 라고 외칩니다.
어릴 때 우리는 수학을 이렇게 배우지 않았어요. 추상적인 것이 아니라 사과, 돈, 주변 사물을 세는 것이었죠. 눈에 보였어요. 지금은 모든 것이 기호, 트릭, 패턴이 되고, 그 과정에서 실제 생활에서 보는 눈을 잃어버린 것 같습니다.
다른 관점
“문제 → 패턴”
을 하는 대신에
“패턴 → 실제 생활에서 어디에 존재하는가?”
를 시도해 보면 어떨까요?
즉, 문제에서 패턴을 인식하는 것이 아니라 그 패턴을 현실 세계 상황과 연결하는 겁니다.
예시 1: Subarray Sum = K
전형적인 사고 단축키: “프리픽스 합 + 해시맵 👍 완료”. 두 주가 지나면: “해시맵이 뭐였지?? 😭”.
현실 세계 비유: CPU 사용량을 시간마다 모니터링하고 매초 사용량을 기록한다고 가정해 보세요. 가끔 사용량이 90 %까지 급증하고 시스템이 리셋을 트리거합니다. 디버깅 중에 어떤 연속된 시간 구간이 이 급증을 일으켰는지 찾고 싶어합니다.
본질적으로 다음을 수행합니다:
- 사용량을 누적
- 시간을 스캔
- 총합이 90이 되는 연속 구간을 찾음
그 구간을 찾으면 → 그게 원인 → 그게 리셋 트리거가 됩니다.
이는 문자 그대로 subarray‑sum‑equals‑k 문제이지만, “패턴을 적용한다”기보다 “자연스럽게 하는 일”처럼 느껴집니다.
예시 2: Minimum Window Substring
전형적인 사고 단축키: “슬라이딩 윈도우, 빈도 맵, 유효하면 축소”. 결과: 10일 뒤에 기억 상실 💀.
현실 세계 비유: 요리를 하고 있다고 생각해 보세요. 사용할 수 있는 재료 목록이 길게 있습니다(그것이 s). 목표는 필요한 모든 재료를 포함하면서 가장 작은 부분집합을 찾는 것입니다.
따라서 다음을 수행합니다:
- 재료를 계속 선택
- “모두 갖추었는가?” 확인
- 다 갖추었으면 → 불필요한 부분을 제거 시도
- 충분히 작아질 때까지 계속 축소
이는 문자 그대로 “확장 → 만족 → 축소 → 최적화”이지만, “기법”이라기보다 상식에 가깝게 느껴집니다.
내가 말하고 싶은 핵심
문제는 연습 부족이나 기억력 문제라기보다,
“한 번도 직접 경험해 보지 않은 패턴을 외우려 하고 있다”
는 것일 수도 있습니다.
시도해 보고 싶은 변화
“이 패턴은 무엇인가?”
를 묻는 대신에
“이 상황은 실제 생활에서 어디에 나타날까?”
를 물어보는 겁니다.
아직 효과가 있는지는 모르겠지만, 같은 시트를 계속 반복하고, 인터뷰마다 처음부터 다시 시작하거나, 나중에 기억이 안 나는 것을 “알고 있다”고 가장하는 것보다 더 오래 기억에 남을 것 같은 느낌이 듭니다.
몇 가지 문제로 직접 시도해 볼 예정입니다. 최악의 경우: 아무 변화도 없을 겁니다.
이와 비슷한 방법을 시도해 보았고 효과가 있었다면, 댓글로 알려 주세요!