학습한 C와 학습해야 할 C++은 많은 부분에서 유사하다는 사실은 알고 있었지만 왜 코딩테스트를 C++로 쳐야하는 것일까에 대한 의문이 들었고, 다양한 reference들을 찾아보며, 주변 사람들의 조언을 통해 나름대로 합리적인 근거들을 확인할 수 있었다.
본격적으로 C++ 문법부터 이를 활용한 자료구조, 알고리즘에 나아가기 전에 가장 큰 이유 2가지 정도를 정리하고 넘어가보자.
첫번째로 C++ 이 객체지향 언어라는 점이다. 사실 이 점은 아직 코딩 초짜인 우리에게 크게 중요하지 않다. 컴퓨터공학 언어의 패러다임상 객체지향 언어와 절차 지향 언어로 구분이 되는데, 이 차이에 대해서는 우리가 체감하기는 쉽지 않기 때문이다.
혹시 궁금한 사람이 있다면 다음 Reference를 참고하길 바란다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qriositylog&logNo=221457311265
그럼에도 C++을 학습해야 하는 이유는 이 언어를 학습하는 과정에서 스스로도 모르게 익숙해지는 객체 지향식 코딩이 우리가 학교를 다니며, 더 나아가 회사에 나가서도 학습해야할 다양한 언어들과 일맥상통하기 때문이다.
Android Studio 에서 호환하는 Java, Kotlin 및 딥러닝이나 인공지능 쪽에서 사용하는 언어인 Python 모두 객체 지향 언어에 해당한다.
두번째로 C++에서는 C에 비해 다양한 STL이 포함되어 있다는 점이다.
STL은 Standard Library로, 우리가 학습했던 경험을 떠올려보면
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
위의 코드에서 표준 입출력 라이브러리인 첫 줄을 제외하고 무언가 함수를 사용하려면 Include 했어야 하는 헤더파일들이라고 생각하면 된다.
C++에서는 아래와 같은 다양한 기능과 자료구조, 알고리즘 등이 구현되어 있어 개발자가 직접 구현할 필요가 없다. 이러한 표준 라이브러리는 코딩테스트에서 자주 사용되는 작업들을 간편하게 처리할 수 있도록 도와준다.
#include <iostream>
#include <stack>
#include <queue>
#include <algorithm>
#include <vector>
#include <string>
앞으로 지독하게 자주 사용할 STL이라 한 번씩 눈에 익혀두면 좋을 듯하다.
끝으로 1학기에 우리가 힘들게 구현했던 하나의 문제를 리뷰해보고 C++ STL을 활용해서 얼마나 더 간단하게 구현이 가능한가에 대해서 직접 확인해보자!
공부를 했다면 10주차에 배열을 학습할 때 마지막에 있었던 문제인데,
마지막에 나와있는 정렬하는 함수를 구현할 때 상당히 애를 먹었던 기억이 난다.
우선, 당시에 C를 활용하여 짰던 코드는 다음과 같다. (정렬의 원리에 대해서는 지금은 크게 중요하지 않기에 넘어간다. C++ STL의 강력함에 대해서 체감했으면 한다)
#include <stdio.h>
#include <stdlib.h>
// 배열을 출력하는 함수
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 배열을 정렬하는 함수 (여기서는 오름차순 정렬)
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 두 원소를 교환
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int size=5;
int arr[5];
printf("배열 요소를 입력하세요:\n");
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
printf("정렬 전 배열: ");
printArray(arr, size);
sortArray(arr, size);
printf("정렬 후 배열: ");
printArray(arr, size);
return 0;
}
실행 결과는 다음과 같다.
다음으로 C++를 활용해서 같은 문제의 코드를 짜보자.
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[5];
// 사용자로부터 5개의 정수 입력 받기!
for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}
sort(arr, arr + 5);
// 정렬 후에 출력하기!
for (int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
}
return 0;
}
실제로 이게 끝인데 sort 함수가 위에서 include 한 algorithm STL에 내장이 되어있기에 매우 편하게 코드를 짤 수가 있다.(다른 문법들은 차차 공부하기로 하고, 위의 C코드랑 정렬하는 부분만 비교해서 살펴보자)
같은 결과가 잘 나오는 것을 확인할 수 있다.