상세 컨텐츠

본문 제목

알고리즘 문제 풀이: 자주 묻는 질문들 Top 10

문제풀이

by Gravekper 2020. 11. 8. 07:39

본문

 

 

알고리즘 공부에 대해 자주 받는 질문들을 정리해 보았습니다.

공부를 시작하기 전에 프로그래밍 언어를 얼마나 잘 다뤄야 하나요?

정확한 기준은 없지만, 이런 것들을 할 수 있으면 특별히 더 필요한 건 없습니다.

  • 정수나 문자열 입력받아 처리하기

  • 조건문과 반복문

  • 함수 정의해 사용하기

  • 라이브러리 함수 사용하기

언어의 기능들을 이것들만 사용하는 건 아니지만, 이것들 이외에는 앞으로 필요할 때 공부해도 충분합니다.

각 기능들을 연습할 때에는 백준 온라인 저지의 단계별로 풀어보기(https://www.acmicpc.net/step)를 추천합니다.

뭘 보고 공부하면 좋을까요?

처음 공부를 시작한다면 백준 온라인 저지의 '단계별로 풀어보기'에 있는 주제들을 순서대로 공부하는 것이 좋습니다. 이 때 잘 모르는 주제는 웹에서 검색하거나 문제를 해결한 다른 사람들이 작성한 글을 보면 도움이 됩니다.

관련 서적은 '알고리즘 문제 해결 전략'을 추천합니다. 그 외에도 좋은 책이 많이 나왔지만 아직 제가 다 읽지 못해 늘 보던 책만 추천하는 부분은 양해 바랍니다.

저도 이 질문의 답이 될만한 튜토리얼 문서들을 천천히 준비하고 있습니다. 내용이 충분히 갖춰지면 이 항목 밑에 링크가 들어갈 겁니다.

좋은 문제는 어떻게 찾나요?

특정 난이도나 분류에 해당하는 문제를 풀고 싶다면 백준 온라인 저지나 Codeforces에서 난이도나 분류로 검색하세요. 백준 온라인 저지의 난이도와 문제 카테고리 기능은 solved.ac에서 제공합니다.

특정 대회의 기출문제를 찾는다면 백준 온라인 저지의 대회 카테고리에서 찾아보세요. 개인 연습용으로는 올림피아드, 팀 연습용으로는 ICPC 세트를 많이 이용합니다. Codeforces의 Virtual Contest 기능을 사용하는 것도 좋습니다.

문제를 선택할 때는 이미 많은 사람들이 해결한 문제를 골라서 푸는 것이 좋습니다. 해결한 사람이 많으면 문제 지문과 데이터에 문제가 없고 난이도에 많은 사람들의 의견이 반영되어 있으리라 기대할 수 있습니다. 그리고 그런 문제들은 인터넷 검색을 통해 다른 사람들의 해법을 찾기도 쉽습니다.

얼마나 고민한 후에 해답을 보는 게 좋을까요?

오래 공부한 사람들 사이에서도 의견이 많이 갈리는 주제입니다. 공부하는 목적에 따라서도 많이 다릅니다.

일반적으로 문제를 읽자마자 해답을 찾거나 풀리지 않는 문제를 너무 오래 고민하는 건 좋지 않습니다. 특히 너무 오랫동안 풀리지 않는 문제에 대해 고민하는 것보다 새로운 문제들을 여러 개 접하는 것이 실력 향상에 큰 도움이 됩니다. 개인의 취향에 따라 30분에서 두 시간정도 시간을 정해두고 그만큼 생각해도 풀이가 떠오르지 않는다면 해답을 찾는 것을 권장합니다.

코딩 테스트를 준비하는 것과 대회를 준비하는 것은 어떻게 다른가요?

코딩 테스트에는 일반적으로 기반 지식이 많이 필요하지 않은 문제들이 출제됩니다. 기반 지식으로는 보통 기초적인 조합론, 자료 구조, 그래프 이론이 필요합니다. 고난이도 문제도 노린다면 최단 경로 알고리즘이나 DP를 연습하는 것도 좋습니다.

경시대회에는 프로그래밍을 통해 풀 수 있는 건 거의 뭐든지 출제됩니다. 복잡한 자료구조와 알고리즘을 많이 알수록 도움이 됩니다. 처음 공부하는 분들 관점에서 보면 절대 시간 내에 결과가 나오지 않을 것같은 문제들을 해결하는 방법들을 공부하게 됩니다.

코딩 테스트를 준비하는 데에 얼마나 걸리나요?

평소에 얼마나 코드를 작성하거나 수학 공부를 했는지에 따라 많이 다릅니다.

저는 대학교 3학년 전공과목 2~3개 정도 좋은 성적을 받을 정도 시간을 투자하면 충분히 좋은 점수를 받을 정도로 준비할 수 있다고 생각합니다.

코드포스가 뭐죠? 꼭 해야 하나요?

코드포스는 알고리즘 대회가 자주 열리는 사이트입니다. 주로 한국 시간으로 자정 전후에 대회가 열리고 제한 시간동안 푼 문제 수에 따라 참가자의 레이팅이 매겨집니다.

저는 코드포스 대회가 끝난 뒤에 문제에 대해 설명하는 방송을 진행합니다. 제 유튜브 채널에는 지난 코드포스 대회 풀이 영상이 올라옵니다.

코드포스는 프로그래밍 대회에 관심이 있고 경쟁을 좋아하는 분들에게 추천합니다. 코드포스에 최근에 출제된 문제는 최근에 많은 사람이 접근한 문제이기 때문에 공부 과정에서 커뮤니티에 문제에 대해 질문하기 좋습니다.

코딩 테스트에 주로 나오는 유형과는 많이 다르기 때문에 코딩 테스트를 목적으로 공부하는 분들은 경쟁에 관심이 있는 분들에게만 권합니다. 알고리즘 대회를 준비하는 분들도 준비하는 대회 유형에 따라 필요한 능력이 다르기 때문에 반드시 코드포스에서 공부해야 하는 것은 아닙니다.

지금 공부 시작해서 코드포스 xxxx점 찍으려면 얼마나 걸리나요?

얼마나 공부를 많이 하는지, 지금까지 무엇을 공부했는지에 따라 다릅니다.

블루까지는 어려운 문제를 푸는 것보다 간단한 문제를 빨리 파악하고 푸는 것이 중요합니다. 레이팅을 올리는 게 목적이라면 이전 대회 기출문제의 A, B번 문제들을 연습하면 많이 도움이 됩니다.

퍼플 이상을 노린다면 길게 시간을 두고 여러 분야의 문제들을 꾸준히 푸는 것이 좋습니다.

알고리즘만 공부하면 취직할 수 있나요? / 큰 대회에서 입상하거나 코드포스 xxxx점이면 회사에서 연락 오나요?

보통 그렇지 않습니다.

알고리즘을 공부해 코딩 테스트를 통과할 수 있을 정도의 실력이 되면 분명히 그만큼 취업에 유리합니다. 하지만 채용 과정에는 코딩 테스트만 있는 것이 아닙니다. 다른 과정들도 통과할 수 있도록 준비해야 합니다.

알고리즘 대회에서 좋은 성과를 거둔 분들을 많이 채용하는 기업들도 있습니다. 하지만 특기로 삼을 정도로 알고리즘을 공부하려면 그만큼 큰 성과를 내야 하고 오랜 시간이 걸립니다. 적어도 다른 방법으로 취업을 준비하는 것보다 훨씬 많은 시간이 필요합니다.

회사에서 개인에게 오는 연락은 저는 꽤 오래 전에 두 번 받아봤습니다. 그리고 아쉽게도 저는 취직해 본 적이 없습니다.

알고리즘 공부를 하면 실무에 얼마나 도움이 되나요?

만약 프로그래밍에 익숙하지 않고 수학적 모델을(조합론이나 정수론 기초) 구현하는 것이 익숙치 않다면, 알고리즘 공부가 프로그래밍에 익숙해지는 데에 많이 도움이 됩니다.

이미 숙련된 프로그래머라면 알고리즘 공부가 다른 일에 큰 도움이 되지는 않습니다. 여기서 말하는 '다른 일'이 알고리즘 강의나 문제 출제같은 일이 아니라면 말입니다.

폰 노이만과 투어리스트가 싸우면 누가 이기나요?

제가 어제 꿈에서 둘 다 이기고 왔습니다.

함께 보면 좋은 자료

관련글 더보기

댓글 영역