Skip to content

Latest commit

 

History

History
119 lines (86 loc) · 11.7 KB

문제_선정.md

File metadata and controls

119 lines (86 loc) · 11.7 KB

문제 선정을 위한 가이드

플랫폼 선택

각 코딩테스트를 지원하는 플랫폼마다 장단점이 있습니다. 코딩테스트 스터디 운영, 기업의 코딩테스트 경험을 바탕으로 평가합니다.

아래 설명된 플랫폼 외에도 구름, HackerRank, Codility에서 실제 코딩테스트가 많이 이뤄지는 편이지만, 해당 플랫폼을 통해 코딩테스트를 준비해 본 경험은 없어 생략했습니다.
혹시 해당 플랫폼을 통해 코딩테스트 공부를 한 경험이 있다면, 아래 내용처럼 제보해주시거나, PR을 작성해주시면 감사하겠습니다.

백준 온라인 저지는 개발자 취업을 준비 중인 사람이라면 들어본 플랫폼일 것입니다. 여기에 각 문제의 난이도를 평가하거나, 관련 알고리즘 등 고급 검색 조건을 지원하는 솔브닥을 같이 활용하면 코딩테스트 준비에 부족함은 없으리라 생각합니다.

  • 장점:
    • 많은 문제 풀
    • 다양한 프로그래밍 언어 지원
    • 문제별로 등록된 Q&A를 통한 문제 해결법 힌트
    • 백준 그룹 등을 통한 그룹 스터디 관리의 용이함
    • 문제의 난이도 예측 용이 (솔브닥 연동 필요)
    • 문제 별 알고리즘 정보가 제공되어 풀이 방식에 대한 힌트를 받을 수 있음
  • 단점:
    • 실제 기업의 코딩테스트가 이뤄지는 플랫폼은 아님
    • 알고리즘 대회의 운영 방식에 가깝게 제공됨
    • 일부 프로그래밍 언어의 경우, 언어적 한계로 인해 알고리즘 구현이 맞아도 통과하지 못할 수도 있음
      ex. JavaScript의 경우, node.js로 제출해야 하는데 IO 속도를 올릴 수 없어서 시간초과 되는 경우가 많습니다.
    • 문제의 채점 방식이 입/출력 비교이므로, 알고리즘과 관계없는 입출력 구현이 필수
    • 난이도 높은 문제로 갈 수록 알고리즘 구현보다 IO 처리 등 고려해야 할 사항이 추가됨
      (각 언어별 고속 IO를 위한 코드 패턴으로 작성하는 것을 습관으로 하면 해결됨)

장점과 단점이 매우 명확한 플랫폼이라 생각합니다. 특히 스터디 운영 및 관리 면에서는 백준 그룹의 기능이 강력해서, 처음 스터디를 운영하실 때는 백준을 기반으로 하는 것을 추천드립니다.

문제 풀이 과정에서 알고리즘 구현 이외의 고려사항을 단점으로 언급했으나, 개인적으로는 장점이라 생각합니다. 고속 IO 처리를 해야 함으로서 IO 처리 방식에 대한 이해나, 언어 내부 동작 원리 등을 학습할 수 있어서 추후 기술 면접에서 유용하게 활용될 수도 있다 생각하기 때문입니다. 물론 JavaScript처럼 특정 난이도 이상 문제에서 활용이 불가능한 경우는 단점이 맞습니다.

프로그래머스는 실제 기업의 코딩테스트도 진행되는 플랫폼입니다. 실제 시험시 각 언어의 레퍼런스 참고 링크도 제공되는 등, 코딩테스트를 수행하는 입장에서 반가운 플랫폼 중 하나입니다. 또한 코딩테스트를 준비하는 다른 분들이 백준 못지 않게 많이 사용하는 것을 확인할 수 있었습니다.

  • 장점:
    • 실제 기업의 코딩테스트가 이뤄지는 플랫폼
    • 다양한 프로그래밍 언어 지원 (단, 문제에 따라 지원 언어 종류가 다름)
    • 알고리즘 외 SQL 등 문제 연습도 가능함
    • 단일 기업의 공채 외에도 챌린지 형태로 코딩테스트 행사가 자주 열림
    • 함수의 인자 전달(입력)과 결과값 반환(출력) 형태로 코드 작성
      (알고리즘 구현 외 사항을 고려하지 않아도 됨)
    • 다른 실험용 입출력 데이터를 추가하여 온라인으로 검증할 수 있음
  • 단점:
    • 상대적으로 적은 문제 풀
    • 알고리즘 종류 별 문제 필터링이 불가능함 (코딩테스트 고득점 Kit 제외)
    • 난이도 분류 개수가 적음 (5단계)
    • 같은 난이도 분류 내 체감 난이도 편차가 큼

코딩테스트를 보는 입장에서는 좋은 플랫폼이지만, 코딩테스트 준비를 위한 공부에서 가장 좋은 플랫폼이라고 말하기에는 애매한 부분이 있습니다. 이미 웬만한 알고리즘에 대한 이해가 되어있고, 난이도가 높은 기업의 코딩테스트를 준비한다면 괜찮은 플랫폼이지만, 초-중급 알고리즘 연습이나 전문적인 스터디 운영에는 적합하지 않을 수도 있습니다.

해외 코딩테스트 및 준비를 위한 플랫폼인 Leetcode입니다. 스터디 운영하면서 Leetcode 문제를 선호하는 분이 계셨고, 외국계 기업이나 해외 플랫폼의 코딩테스트 준비에 좋다는 이야기도 많이 들었습니다.

  • 장점:
    • 많은 문제 풀
    • 다양한 프로그래밍 언어 지원
    • 문제 별 알고리즘 정보가 제공되어 풀이 방식에 대한 힌트를 받을 수 있음
    • 유사 문제 추천을 통해 특정 주제에 대한 집중 공부에 용이함
    • 해외 플랫폼/외국계 기업 코딩테스트 문제유형과 비슷한 문제가 많음
    • 다른 실험용 입출력 데이터를 추가하여 온라인으로 검증할 수 있음
    • 함수의 인자 전달(입력)과 결과값 반환(출력) 형태로 코드 작성
      (알고리즘 구현 외 사항을 고려하지 않아도 됨)
  • 단점:
    • 플랫폼 언어가 영어로만 제공됨 (영어 숙련도에 따라 단점이 아님)
    • 코딩테스트 준비로는 많이 활용되는데, 실제 시험용으로는 사용되지 않는 것으로 보임
    • 난이도 분류 개수가 적음 (3단계)

굳이 비유하자면 영어판 백준이라고 표현할 수 있겠습니다. 문제도 많고, 알고리즘 기준으로 문제 찾기도 쉽습니다. 굳이 단점이라면 모든 시스템이 영어로 제공되기 때문에, 영어에 여전히 익숙하지 않은 분들은 알고리즘 구현하기도 바쁜데 영어 문제를 해석해야 한다는 어려움을 겪을 수도 있겠습니다.

해당 사이트를 보면 기업의 코딩테스트도 지원할 법 한데, Leetcode를 통해 코딩테스트를 봤다는 이야기는 못 들어봤습니다.

문제 선정 방식

코딩테스트를 준비하려면 문제를 풀어야 하고, 좋은 문제를 선정하는 것만으로도 공부 효율이 다르다고 생각합니다.

문제를 선정하는 방식은 특정 주제/알고리즘 위주로 공부하는 방식, 유명 기업들의 기출문제 위주로 공부하는 방식, 두 가지로 나눌 수 있다고 생각합니다.
(저희 스터디는 평소에 특정 주제 위주로 선정하다가, 중간에 한 번씩 기출 위주로 선정했습니다.)

유명 기업들의 기출문제 위주로 공부

블라인드 채용이나, 대규모 공채의 경우 지원자들의 변별력을 가르고, 우수한 인재를 쉽게 필터링 하기 위해 다른 기업의 일반적인 코딩테스트보다 어려운 난이도로 진행되는 것으로 알고 있습니다. 이런 기업의 경우 채용 프로세스가 종료된 이후 문제 공개 및 풀이까지 공개하는 경우가 많아서 자료가 모자라진 않습니다.

다만 앞서 말한 특징들로 인해 문제 난이도가 어려운 편이고, 난이도가 평이하더라도 기초적인 알고리즘 구현에 익숙해야 쉽게 풀 수 있는 문제들이 많다 생각합니다.

어느정도 알고리즘에 대한 이해와, 이를 구현해 보면서 익숙해진 분들의 경우 바로 기출문제 위주로 공부해도 좋지만, 본인이 이 부분에서 부족함을 느끼고 있다면 공부에서 피로감을 느끼거나, 좌절하게 될 가능성이 높으므로, 웬만큼 준비됐다 생각하는 분들만 이런 식으로 문제 선정하는 것을 추천드립니다.

  • 백준에서 삼성 SW 역량 테스트 기출 문제, A형 기출 문제 등 문제집이 있습니다.
  • 프로그래머스의 문제 모음 분류에서 기출 별로 찾을 수 있습니다.
    챌린지는 여러 기업들이 함께 채용할 때 사용된 기출문제입니다.
    카카오 블라인드 채용 문제들도 여기에서 찾으실 수 있습니다.
  • leetcode의 Top Interview Questions가 있습니다.
    특정 기업 (Facebook, Google, Amazon, Microsoft 등) 문제집도 있는데, 유료입니다.

특정 주제/알고리즘 위주로 공부

이 방식에서는 적절한 주제, 적절한 난이도를 찾는 것이 중요합니다.

일반적인 코딩테스트의 목적은 "문제를 읽고, 이해해서, 그 풀이 과정을 코드로 잘 작성할 수 있는가"를 물어본다 생각합니다. 이에 따라 대부분이 문제대로 읽고 코드를 작성하는 구현, 시뮬레이션 위주로 연습하면 다른 주요 알고리즘까지 포함하여 연습할 수 있습니다.

학습해야 할 알고리즘 종류는 백준의 단계별로 풀어보기를 참고하여 부족한 부분을 채우는 것을 추천합니다. 일반적인 난이도 준비라면 29단계: 트리 이하로 충분하고, 좀 더 고난이도 문제까지 준비하려면 39단계: 세그먼트 트리까지 준비하면 충분할 것 같습니다.

이 외에도 솔브닥의 CLASS 난이도 분류를 활용하는 것도 괜찮습니다. 알고리즘 위주로 분류되어있진 않지만, 각 CLASS마다 선정된 문제의 알고리즘 정보를 참고하면 될 것 같습니다. 추천 난이도는 CLASS 4에서 CLASS 5 까지 준비하면 충분하다 생각합니다.

다른 공개된 스터디/레포/강의 등의 문제 선정 내역 참고

직접 문제를 선정하는 것 보다는, 다른 사람들이 이미 선정했던 문제 등을 참고하여 재사용하는 것도 좋습니다.