Introduction

PS를 시작해봅시다!

YEAHx4

YEAHx4

2025-04-10
5 mins

Algorithm Guidebook

대상 독자

이 사이트의 글은 알고리즘을 처음 배우는 분들을 위한 가이드입니다. 따라서 알고리즘에 대한 아무런 지식이 없어도 따라올 수 있도록 바닥부터 시작했습니다. 이 가이드를 따라오는데 필요한 사전 지식은 중학교 수준의 수학 지식, 프로그래밍 언어에 대한 지식입니다. 언어 문법 자체에 대해서는 크게 언급하지 않습니다. C++과 Python으로 설명할 예정이며 C++에 더 중점적으로 설명할 예정입니다. 문법 자체가 크게 다르진 않으니 둘 중 하나만 할 수 있으면 충분합니다. 또, 멀티스레딩과 같은 고급 개념은 사용하지 않습니다. C++에서도 포인터같은 어려운 문법은 거의 사용하지 않을 예정이니 기초적인 문법만 알고 있으면 충분합니다.

BOJ와 solved.ac

예제, 연습은 국내 최대 온라인 저지인 백준 온라인 저지(BOJ)에서 진행합니다. 따라서 백준 계정이 있어야 실습을 할 수 있습니다. 백준은 많은 문제를 제공하고 자동으로 채점해주는 온라인 저지(OJ)입니다. 많은 대학교, 커뮤니티 대회가 꾸준히 열리고 있고 계속 새로운 문제가 추가되고 있습니다.

백준을 처음 시작하게 되면 아무런 가이드 없이 수만개의 문제 앞에 놓이게 되는데 어떤 문제를 풀어야 할지, 이 문제의 난이도는 어떤지 등 아무런 정보를 얻을 수 없어 꽤 막막합니다. 그래서 서드파티인 solved.ac를 함께 사용하면 좋습니다. solved.ac는 shiftpsh님이 만든 프로젝트로 큰 커뮤니티를 이용해 문제의 난이도와 태그를 분류하는 프로젝트입니다. solved.ac와 연동하면 이 문제가 어느정도 난이도를 가졌는지 브론즈5\~루비1로 볼 수 있고 이 문제를 어떤 알고리즘을 사용해서 풀어야 하는지 태그도 볼 수 있습니다. 자신의 실력 지표를 티어로 보여주기도 하니 많은 도움이 됩니다.

공부 방법

공부에는 왕도가 없고 정답이 없지만 처음 시작하시는 분들을 위해 간단히 방향을 제시해보겠습니다. 그냥 이사람은 이렇게 생각하는구나 정도로 참고해주세요. 처음에는 무엇부터 시작해야 할 지 모를텐데 solved.ac의 클래스부터 공부하면 방향을 잡는데 꽤 도움이 됩니다. 어느정도 실력이 쌓였다고 생각이 되면 랜덤 디펜스나 solved.ac의 랜덤 마라톤을 하며 진행하면 됩니다. 문제를 풀다 보면 도저히 감이 안오거나 막히는 경우가 꽤 있을 텐데 그럴 때는 여러 전략을 사용할 수 있습니다. 첫번째는 바로 계속 잡고 있는 것이고 다른 방법은 풀이를 찾아보는 것 입니다. 뭐든 크게 상관없지만 풀이를 보는 것 자체를 너무 죄악처럼 생각하지 않아도 된다는 말을 드리고 싶습니다. 답을 베끼는 것이 아니라 풀이를 보고 새로운 사실을 얻고 자신의 것으로 만드는 공부 과정으로 생각하면 꽤 괜찮은 공부 방법입니다. 그렇게 꾸준히 하다보면 좋은 실력을 갖출 수 있을 것입니다!

경쟁적 프로그래밍

경쟁적 프로그래밍(Competitive Programming, CP)는 문제를 푸는 것은 같지만 시간 제한을 두고 다른 사람들과 경쟁하는 대회입니다. 실전 대회도 있고 플랫폼에서 열리는 온라인 대회도 있습니다. 온라인 대회 플랫폼은 대표적으로 atcodercodeforces가 있습니다. 온라인으로 진행되는 만큼 편하게 볼 수 있고 대회가 자주 열리는 것이 장점입니다. 레이팅 시스템도 있어서 실력에 맞게 색(랭크)를 부여받고 백준 id와 연동하면 백준에서도 id에 색을 입힐 수 있습니다. 백준 문제 출제나 검수도 앳코더, 코드포스 점수를 요구하니 욕심이 난다면 해보는 것을 추천합니다. 백준에서도 종종 대회가 열립니다. 백준에서는 국내 대학교 대회, 커뮤니티 대회가 자주 열립니다. 참여하면 solved.ac 뱃지와 배경을 주는 경우도 있으니 강력히 추천합니다.