개발 공부

프로그래머스 레벨별로 자주 등장하는 유형과 접근법

armycode 2026. 8. 19. 18:11

코딩테스트를 준비할 때 문제를 많이 풀면 그만큼 실력이 는다고 생각하기 쉽습니다. 그래서 추천 문제나 정답률이 높아 보이는 문제를 닥치는 대로 풀고, 막히면 해설을 보고 이해한 느낌만 받은 채 다음 문제로 넘어가는 경우가 많습니다. 그런데 실제로는 몇백 문제를 풀어도 표현이 조금만 바뀐 낯선 문제 앞에서 다시 막막해지는 일이 흔합니다. 문제 수보다 중요한 건 "이 문제가 어떤 유형에 속하는지"를 알아채는 감각입니다. 이번 글에서는 프로그래머스 각 레벨에서 자주 등장하는 유형과, 그 유형을 알아보고 접근하는 방법을 정리해봤습니다.

목차

  1. 문제만 많이 풀면 실력이 는다는 착각
  2. 레벨과 유형은 서로 다른 축이다
  3. Level 0~1, 기초 문법과 해시·정렬로 감각 잡기
  4. Level 2, 완전탐색과 그리디 구분하기
  5. Level 2, 스택/큐와 BFS·DFS 신호 알아채기
  6. Level 2~3, 이분탐색이 필요하다는 신호
  7. Level 3, 동적 계획법(DP) 패턴 잡기
  8. SQL도 함께 준비해야 하는 이유
  9. 틀린 문제 복습하는 법: 45분 원칙과 오답노트
  10. 한눈에 보는 레벨별 유형표
  11. 자주 묻는 질문(FAQ)

1. 문제만 많이 풀면 실력이 는다는 착각

코딩테스트를 준비하는 사람들 사이에서 "일단 문제를 많이 풀어라"는 조언은 흔합니다. 틀린 말은 아니지만, 유형에 대한 개념 정립 없이 숫자만 채우면 한 가지 함정에 빠지기 쉽습니다. 비슷한 유형을 여러 번 풀었는데도, 표현이 조금만 바뀐 문제를 만나면 다시 처음부터 헤매는 것입니다.

이런 일이 반복되는 이유는 문제를 "풀이 자체"로 기억하기 때문입니다. 어려운 문제를 몇 시간 붙잡고 있다가 해설을 보고 이해한 느낌을 받는 과정을 반복해도, 정작 실전에서 낯선 문제를 만났을 때 어떤 도구를 꺼내야 할지 판단하는 능력은 늘지 않습니다. 반대로 유형을 기준으로 문제를 바라보는 습관을 들이면, 처음 보는 문제라도 "이건 해시로 접근하면 되겠다", "이건 완전탐색으로 충분하겠다"는 판단이 훨씬 빨라집니다. 코딩테스트는 출제되는 알고리즘 유형이 어느 정도 정해져 있기 때문에, 유형별 접근법을 먼저 익히고 난이도를 올리는 순서가 훨씬 효율적입니다.

2. 레벨과 유형은 서로 다른 축이다

프로그래머스의 레벨은 난이도를 나타내는 지표이고, 유형은 문제를 푸는 데 필요한 도구를 나타내는 지표입니다. 이 둘은 서로 다른 축이라는 걸 이해하는 것이 중요합니다.

같은 레벨 안에서도 여러 유형이 섞여 있고, 같은 유형이라도 레벨이 올라갈수록 요구되는 응용력이 달라집니다. 해시는 Level 1에서도 등장하지만, Level 2에서는 조건이 복잡해진 형태로 다시 나타납니다. 그래서 "이 레벨을 끝냈다"보다 "이 유형을 여러 난이도에서 다뤄봤다"는 기준으로 학습 진도를 판단하는 것이 훨씬 정확합니다.

3. Level 0~1, 기초 문법과 해시·정렬로 감각 잡기

Level 0과 Level 1 초반은 기본 문법(조건문, 반복문, 배열, 문자열 슬라이싱)을 자유롭게 다룰 수 있는지 확인하는 단계입니다. 특별한 알고리즘보다 문제에 나온 조건을 그대로 코드로 옮기는 구현 능력이 핵심입니다.

Level 1 중상위로 넘어가면 해시와 정렬이 본격적으로 등장합니다.

  • 해시: '완주하지 못한 선수', '폰켓몬'처럼 특정 값이 존재하는지, 몇 번 등장하는지를 빠르게 확인해야 하는 문제에서 등장합니다. 리스트를 이중 반복문으로 전부 비교하려는 습관이 있다면, 해시를 활용해 탐색 속도를 줄이는 연습이 필요합니다.
  • 문자열: '신규 아이디 추천'처럼 문자 변환, 특정 문자로 분리·결합하는 처리 능력을 묻는 문제가 자주 나옵니다.
  • 정렬: 단순한 오름차순·내림차순을 넘어, 특정 기준을 직접 정의해서 정렬하는 문제가 이 단계부터 등장하기 시작합니다.

이 유형들은 이후 모든 레벨에서 다른 알고리즘과 결합되어 반복적으로 나타나므로, Level 1에서 확실히 익혀두는 것이 좋습니다.

4. Level 2, 완전탐색과 그리디 구분하기

Level 2부터는 "가능한 모든 경우를 다 따져봐야 하는가, 아니면 매 순간 최선의 선택만 하면 되는가"를 구분하는 능력이 필요합니다.

  • 완전탐색: '카펫', '피로도'처럼 정답의 범위가 크지 않고, 모든 경우의 수를 나열해도 시간 안에 처리할 수 있는 문제에서 사용합니다. 문제에 등장하는 숫자의 범위가 작다면 완전탐색을 먼저 의심해보는 것이 좋습니다.
  • 그리디: '구명보트', '조이스틱'처럼 매 순간 가장 좋아 보이는 선택을 반복해도 전체 최적해가 보장되는 문제에서 사용합니다. 다만 그리디가 항상 정답을 보장하지는 않으므로, "이 선택이 정말 전체적으로도 최선인가"를 검증하는 습관이 필요합니다.

두 유형을 헷갈리는 경우가 많은데, 완전탐색으로 풀리는 문제에 그리디를 억지로 적용하려다 오답이 나오는 경우가 대표적입니다. 문제의 데이터 범위와 조건을 먼저 확인하는 습관을 들이면 구분이 훨씬 쉬워집니다.

5. Level 2, 스택/큐와 BFS·DFS 신호 알아채기

자료구조를 활용하는 유형도 Level 2에서 본격적으로 등장합니다.

  • 스택/큐: '올바른 괄호', '기능개발', '프로세스'처럼 순서가 중요한 문제, 특히 "가장 최근 것부터 처리"하거나 "먼저 들어온 것부터 처리"해야 하는 문제에서 등장합니다. 문제 지문에 "쌓다", "대기열", "순서대로 처리" 같은 표현이 나오면 스택이나 큐를 의심해볼 수 있습니다.
  • DFS: '타겟 넘버'처럼 모든 경로를 끝까지 탐색해봐야 하는 문제에 등장합니다. 주로 재귀 호출 방식을 사용합니다.
  • BFS: '게임 맵 최단거리'처럼 최단 경로를 구해야 하는 문제에 쓰입니다. 큐 자료구조를 활용해 인접한 지점부터 순차적으로 방문하는 기본 틀을 익혀두면 좋습니다.

두 유형 모두 처음에는 코드 구조 자체가 낯설게 느껴질 수 있지만, 기본 템플릿을 한 번 익혀두면 조건만 바뀐 채 반복적으로 등장하는 경우가 많아 익숙해지는 속도가 빠릅니다.

6. Level 2~3, 이분탐색이 필요하다는 신호

이분탐색은 알아채기가 유독 어려운 유형 중 하나입니다. 겉보기에는 완전탐색처럼 보이지만, 데이터의 범위가 매우 크다는 점에서 다르게 접근해야 합니다.

  • 정렬된 데이터에서 특정 조건을 만족하는 경계값을 찾아야 하는 문제라면 이분탐색을 의심해볼 수 있습니다.
  • 데이터 범위가 수백만 이상으로 커서 완전탐색으로는 시간 초과가 날 것 같은 문제라면, "정답이 될 수 있는 값의 범위"를 절반씩 좁혀가는 방식을 떠올려야 합니다.
  • "최댓값을 최소화", "최솟값을 최대화"처럼 조건을 만족하는 경계를 찾는 표현이 등장하면 이분탐색일 가능성이 높습니다.

처음에는 "왜 이 방식이 통하는지" 이해하는 데 시간이 걸리지만, 몇 문제만 반복해서 풀어보면 패턴이 뚜렷하게 보이기 시작합니다.

7. Level 3, 동적 계획법(DP) 패턴 잡기

DP는 Level 3에서 본격적으로 등장하는, 초보자가 가장 어려워하는 유형입니다.

  • '정수 삼각형', 'N으로 표현'처럼 어떤 문제를 더 작은 부분 문제로 나눌 수 있고, 그 부분 문제의 답을 조합해서 전체 답을 구할 수 있다면 DP를 의심할 수 있습니다.
  • "이전 단계의 결과를 활용해서 다음 단계를 계산"하는 구조가 보인다면, 이전 값을 저장해두고 재활용하는 방식을 떠올려야 합니다.
  • 처음부터 점화식을 완벽하게 세우려 하기보다, 작은 예시를 손으로 직접 계산해보면서 규칙을 찾아가는 방식이 훨씬 효과적입니다.

DP는 다른 유형보다 유독 감이 붙기까지 시간이 걸립니다. 조급해하지 말고, 같은 유형의 문제를 며칠에 걸쳐 반복해서 풀어보는 것을 추천합니다.

8. SQL도 함께 준비해야 하는 이유

알고리즘 유형만큼 놓치기 쉬운 부분이 SQL입니다. 실제 기업 코딩테스트에서는 알고리즘 문제와 함께 SELECT, GROUP BY, JOIN 같은 기본 SQL 문제가 한두 개씩 함께 출제되는 경우가 많습니다.

알고리즘 공부에 집중하다 SQL을 아예 준비하지 않으면, 정작 시험 당일 몇 분 안에 풀 수 있는 문제를 놓치게 됩니다. 프로그래머스의 SQL 고득점 Kit 초급~중급 문제를 알고리즘 공부와 병행해서 틈틈이 풀어두는 것을 추천합니다. 알고리즘만큼 많은 시간을 투자할 필요는 없지만, 기본 문법에 막힘이 없는 정도는 만들어두는 것이 좋습니다.

9. 틀린 문제 복습하는 법: 45분 원칙과 오답노트

유형을 익히는 것만큼 중요한 것이 틀린 문제를 제대로 복습하는 방식입니다.

  • 45분 원칙: 문제를 잡고 45분 정도 고민해도 아이디어가 떠오르지 않는다면, 그 이상 붙잡고 있기보다 해설이나 힌트를 참고하는 것이 효율적입니다.
  • 오답노트 작성: 코드를 그대로 복사해두기보다, 내가 처음 접근했던 방식과 막힌 이유, 핵심이 되는 알고리즘 아이디어, 다시 풀 때 주의할 점을 짧게 기록해둡니다.
  • 3일 뒤 재풀이: 해설을 보고 이해한 문제는 3일 정도 지난 뒤 아무것도 보지 않고 처음부터 다시 풀어봅니다. 이 과정을 거쳐야 비로소 실제 본인의 실력으로 남습니다.

효율성 테스트에서 반복적으로 시간 초과가 난다면, 대부분 이중 반복문을 사용했거나 자료구조 선택이 적절하지 않은 경우입니다. 리스트의 in 연산자 탐색 대신 해시(set, dict)를 활용하거나, 리스트의 맨 앞 원소를 반복적으로 꺼내야 한다면 큐를 활용해 탐색 속도를 개선하는 습관을 들이는 것이 좋습니다.

10. 한눈에 보는 레벨별 유형표

레벨자주 나오는 유형알아채는 신호
Level 0~1 기초 문법, 해시, 문자열, 정렬 존재 여부 확인, 특정 기준 정렬
Level 2 완전탐색, 그리디, 스택/큐, DFS·BFS 작은 데이터 범위, 순서 처리, 최단 경로
Level 2~3 이분탐색 큰 데이터 범위, 경계값 조건
Level 3 동적 계획법(DP), 그래프 응용 부분 문제로 나뉘는 구조

11. 자주 묻는 질문(FAQ)

Q. 유형을 다 익히지 않고도 코딩테스트를 통과할 수 있나요? A. 가능합니다. 다만 완전탐색, 그리디, 해시, 스택/큐, DFS·BFS 정도는 대부분의 기업 코딩테스트에서 반복적으로 등장하므로, 이 유형들만이라도 확실히 익혀두는 것을 추천합니다. Level 2를 막힘없이 풀 수 있다면 대부분의 1차 코딩테스트는 통과권에 들어간다고 볼 수 있습니다.

Q. 유형을 알아도 코드로 옮기는 게 어렵습니다. 어떻게 해야 하나요? A. 유형별로 자주 쓰이는 기본 템플릿을 한 번씩 직접 작성해보고, 그 템플릿을 조금씩 바꿔가며 여러 문제에 적용해보는 연습이 도움이 됩니다. 처음엔 템플릿을 참고해도 괜찮습니다.

Q. DP는 아무리 봐도 감이 안 잡히는데, 포기해도 될까요? A. 신입 채용 코딩테스트라면 DP 없이도 통과 가능한 경우가 많습니다. 다만 완전히 포기하기보다, 쉬운 DP 문제 몇 개만이라도 반복해서 풀어보면 어느 순간 패턴이 눈에 들어오는 시점이 옵니다.


마무리

프로그래머스를 잘 정복하는 방법은 문제를 많이 푸는 것이 아니라, 문제를 보고 유형을 알아채는 감각을 기르는 것에 가깝습니다. 레벨을 올리는 데 집중하기보다, 각 유형이 어떤 신호로 등장하는지를 하나씩 익혀나가면 낯선 문제 앞에서도 당황하지 않게 됩니다.

다음 글에서는 Replit과 웹 IDE 중 싸지방에서 실제 프로젝트 코드를 짤 때 무엇이 더 나은지 구체적으로 정리해보겠습니다.

이 글은 실제 경험과 정보를 바탕으로 작성한 개인적인 정리 글이며, 특정 서비스로부터 협찬을 받지 않았습니다.