Edu/멘토링 자료

[멘토링] 본인 방금 소프트웨어 특기자 되는 상상함(2)

happykoa 2020. 2. 28. 15:18

서론

이 글은 이전 본인 방금 소프트웨어 특기자 되는 상상함 글의 2번째 글입니다.

미리 말씀드립니다.

이 글은 09.27일에 진행되는 한민고등학교 X 한아름 멘토링에서 사용된 자료이며 필자/발표자의 주관적인 생각이 매우 많이 담겨 있는 글입니다. 따라서, 아 이런 idea를 가지고 살아온 사람이 있다고 생각해주시고 무조건 이 말들이 받아들이지는 마시기 바랍니다.

글 내용은 멘토링 이후, 조금씩 수정하여 재업로드하였습니다.
기존의 글은 아래 링크에 있습니다.

링크: shinkeonkim 깃헙 블로그 post

프로그래밍을 해보고 싶다고요?

먼저 기초 100제를 풀어보세요.

codeup.kr에 올라와 있는 기초 100제로 시작해보세요. 링크언어는 C언어로 해봅시다.

제가 기초 100제로 코딩을 시작해서인지는 모르겠지만 기초 100제가 정말 프로그래밍을 시작할 때, 해보면 좋은 문제들로 구성되어 있다고 생각합니다.

oj 사이트 활용를 활용합시다.

진짜 oj 사이트는 너무 많고 많습니다.(사실 저도 oj 사이트 만들 생각이지만 너무나 oj 사이트 만들기 어렵네요...ㅜㅜ) 제가 알고있는 oj 사이트들입니다.

이건 추가로 온라인 알고리즘 대회가 열리는 사이트 목록입니다.

고등학교 알고리즘 대회 및 프로그래밍 대회

뒤늦게 알고리즘에 고여가는 사람의 팁

고등학교 알고리즘 대회의 요즘 메타는 빡센 내용을 구현하거나 수학 실력이 뛰어나야 풀 수 있는 문제보다는
학생이 정말 이 문제에 대해서 깊은 생각을 하고 문제를 해결할 수 있는가를 보는 것 같습니다.

따라서, 평소에 알고리즘 문제를 풀어볼 때, 앞선 글에서 말했듯이 끝없이 질문하는 습관을 가지시는게 좋을 것 같습니다.

그래도 일단 진짜진짜 적어도 아래에 있는 알고리즘들은 공부해보시는 걸 추천합니다.

  • counting sort
  • quick sort
  • Dynamic Programming (복잡한 것 까지는 아니어도 개념이라도..)
  • 이분 탐색
  • DFS / BFS (이거는 진짜 능숙하게 다루셔야 합니다.)
  • Greedy Algorithm (탐욕 알고리즘, 탐욕적이다는 게 뭔지에 대해서 알고 있는게 좋습니다.)
  • 최단 거리 알고리즘
  • 최소 신장 트리 (Minimum spanning Tree)
  • 에라토스테네스의 채
  • 비트마스크

이 알고리즘들은 시간이 되거나 좀 더 어려운 걸 풀어보고 싶으시다면 도전해보세요.
저도 아직 공부 중인 것도 있고 여전히 어려워하는 것들입니다.

  • LIS (O(n^2) 방식과 O(nlogn) 방식 2가지 모두)
  • 볼록 껍질
  • 네트워크 플로우
  • 이분 매칭
  • 세그먼트 트리
  • 평방분할 알고리즘
  • Disjoint-Set
  • 우선순위큐를 활용한 다익스트라 알고리즘
  • 냅색
  • CCW
  • CC(Coin change)
  • 세그먼트 트리 with Lazy Propagation
  • 단절점(AP)
  • LCA

추천하는 커리큘럼(계속 수정 될 예정입니다.)

아래의 그래프는 C++ 기준으로 작성되었습니다.
(ACM-ICPC, 정보올림피아드 등등의 대회에서 주로 C++로 문제를 해결하기 떄문입니다.)