알고리즘 대회를 위한 C++ 대회 환경 구성하기
이번 시간에는 알고리즘 대회를 위한 C++ 대회 환경을 구성해보도록 하겠습니다. 가장 먼저, 자신의 디버깅 및 개발을 위한 개발환경을 구축하셔야 합니다. 저는 정말정말 가벼운 개발환경인 Dev C++을 선호하는 편입니다. 따라서 Dev C++을 기준으로 설명드리고자 합니다.
Dev C++ 설치 경로: https://sourceforge.net/projects/orwelldevcpp/
Dev C++을 설치하셨으면, 실행 이후에 C++11로 컴파일 옵션 설정을 해주시면 됩니다. C++11에는 알고리즘 대회에 적용하기 쉬운 다양한 라이브러리가 준비되어 있기 때문에 실제로 굉장히 많은 하이 코더들이 이를 사용하고 있습니다. 이를 위해서 'Tools' - 'Compiler Options' 탭으로 이동합니다.
이후에 다음과 같이 -std=c++11 컴파일 옵션을 적용합시다.
-std=c++11이제 간단히 "Hello World!"를 출력하는 프로그램을 작성해보도록 하겠습니다.
#include <bits/stdc++.h>
using namespace std;
int main(void) {
cout << "Hello World!";
return 0;
}
실행 결과는 다음과 같습니다.
※ #include <bits/stdc++.h>란? ※
알고리즘 대회에서 가장 많이 사용되는 헤더 파일 중 하나가 바로 bits/stdc++.h입니다. 표준 라이브러리를 모두 포함하고 있는 헤더로서 이것을 사용하면 별도의 헤더를 추가적으로 넣지 않아도 됩니다. 다만 이 헤더는 GCC 전용 라이브러리이므로 GCC를 지원하는 대회 환경에서 사용해야 합니다. 다행히도 대부분의 대회 환경에서는 이를 지원합니다.
이 헤더에 포함되어 있는 대표적인 라이브러리들은 다음과 같습니다.
- #include <string>
- #include <vector>
- #include <memory>
- #include <map>
- #include <algorithm>
- #include <queue>
이외에도 정말 많이 사용되는 라이브러리들이 모두 포함되어 있으므로 시간 절약 및 숏코딩 측면에서 매우 유리하다고 할 수 있습니다. 한 번 벡터(Vector) 라이브러리를 이용해서 N개의 원소를 저장하여 출력하는 프로그램을 작성해보도록 합시다.
#include <bits/stdc++.h> using namespace std; int main(void) { int n; cin >> n; vector<int> a;
for(int i = 0; i < n; i++) { a.push_back(i); } for(int i = 0; i < n; i++) { cout << a[i] << ' '; } return 0; }
실행 결과는 다음과 같습니다.
'알고리즘 대회' 카테고리의 다른 글
| [코드포스] Codeforces Round #634 (Div. 3) (0) | 2020.04.23 |
|---|---|
| [코드포스] Codeforces Round #636 (Div. 3) (0) | 2020.04.23 |
| 코드포스(Codeforces) 개요 및 문제 풀어보기 (0) | 2018.11.27 |
| 코드 포스(Code Force) 1055 - C. Lucky Days (0) | 2018.11.12 |
| 코드 포스(Code Force) 1055 - B. Alice and Hairdresser (0) | 2018.11.12 |
코드포스(Codeforces) 개요 및 문제 풀어보기
코드포스 공식 사이트: https://codeforces.com/
코드포스는 세계에서 가장 유명한 알고리즘 대회 사이트 중 하나입니다. 일반적으로 매 주마다 1회 이상의 대회가 열리며, 대회에 참여해서 문제를 풀면 자신의 성적에 따라서 레이팅(Rating)을 판정 받을 수 있습니다. 코드포스에 가입한 이후에 메인 화면(Home)으로 가보면 다음과 같이 다가 올 대회에 대한 정보가 오른쪽에 출력되며, 위쪽 내비게이션 바에서 대회 목록(Contests)에 들어가서 대회 정보를 확인할 수 있어요.
대회 목록 페이지로 이동하면 다음과 같은 화면이 나옵니다. 위쪽에는 향후 다가올 대회에 대한 정보가 출력되고, 아래 쪽에는 최근까지 진행되었던 대회 정보가 출력됩니다.
이 중에서 하나의 대회에 들어가서 확인해보도록 합시다. 그러면 다음과 같이 문제 목록이 출력되는 것을 확인할 수 있습니다. 이 중에서 원하는 문제를 선택해 문제를 풀 수 있습니다. 코드포스는 문제의 난이도가 쉬운 것부터 어려운 것 순서대로 나열되어 있다는 특징이 있습니다.
특정한 문제를 선택해 들어가 보면 다음과 같은 형태로 문제에 대한 내용이 출력됩니다. 우리는 'SUBMIT CODE'를 눌러서 소스코드를 실제로 제출할 수 있고, 그에 대한 정답 확인은 'MY SUBMISSIONS' 탭에서 확인할 수 있습니다.
또한 문제의 유형이나 점수 등에 대한 정보는 [Problem Tags] 영역에서 확인할 수 있습니다. 이는 실제 대회가 진행되는 중에는 확인할 수 없고, 대회가 끝나고 나면 출제자의 의도 등을 확인할 수 있는 탭이에요. 또한 코드포스는 튜토리얼(Tutorial) 등에 대한 내용도 함께 제시됩니다. 완전히 정답 소스코드를 제공하는 것은 아니지만, 충분히 이해할 수 있는 수준에서의 해법을 알려준다는 특징이 있습니다.
결과적으로 '코드 제출(SUBMIT CODE)' 버튼을 누르면 다음과 같이 코드를 제출할 수 있는 화면으로 넘어갑니다.
소스코드를 제출한 이후에는 '나의 제출(MY SUBMISSIONS)' 탭에서 자신의 정답 여부를 확인할 수 있습니다. 코드포스는 정답이 틀린 경우, 정확히 어떠한 테스트(Test)에서 정답이 틀렸는지까지 알려준다는 특징이 있습니다. 물론 대회가 진행 중일 때는 알려주지 않지만요.
또한 '순위(STANDINGS)' 탭에 가시면 다음과 같이 실시간으로 대회에 참여했던 참가자들의 순위 정보가 출력됩니다.
'알고리즘 대회' 카테고리의 다른 글
| [코드포스] Codeforces Round #636 (Div. 3) (0) | 2020.04.23 |
|---|---|
| 알고리즘 대회를 위한 C++ 대회 환경 구성하기 (1) | 2018.11.27 |
| 코드 포스(Code Force) 1055 - C. Lucky Days (0) | 2018.11.12 |
| 코드 포스(Code Force) 1055 - B. Alice and Hairdresser (0) | 2018.11.12 |
| 코드 포스(Code Force) 1055 - A. Metro (0) | 2018.11.12 |