C to C++ 0. Why C++???

최인규·2023년 6월 27일
0

C/C++

목록 보기
4/7
post-thumbnail

학습한 C와 학습해야 할 C++은 많은 부분에서 유사하다는 사실은 알고 있었지만 왜 코딩테스트를 C++로 쳐야하는 것일까에 대한 의문이 들었고, 다양한 reference들을 찾아보며, 주변 사람들의 조언을 통해 나름대로 합리적인 근거들을 확인할 수 있었다.

본격적으로 C++ 문법부터 이를 활용한 자료구조, 알고리즘에 나아가기 전에 가장 큰 이유 2가지 정도를 정리하고 넘어가보자.

1. 객체지향 언어

첫번째로 C++ 이 객체지향 언어라는 점이다. 사실 이 점은 아직 코딩 초짜인 우리에게 크게 중요하지 않다. 컴퓨터공학 언어의 패러다임상 객체지향 언어와 절차 지향 언어로 구분이 되는데, 이 차이에 대해서는 우리가 체감하기는 쉽지 않기 때문이다.

혹시 궁금한 사람이 있다면 다음 Reference를 참고하길 바란다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qriositylog&logNo=221457311265

그럼에도 C++을 학습해야 하는 이유는 이 언어를 학습하는 과정에서 스스로도 모르게 익숙해지는 객체 지향식 코딩이 우리가 학교를 다니며, 더 나아가 회사에 나가서도 학습해야할 다양한 언어들과 일맥상통하기 때문이다.
Android Studio 에서 호환하는 Java, Kotlin 및 딥러닝이나 인공지능 쪽에서 사용하는 언어인 Python 모두 객체 지향 언어에 해당한다.

2. 다양한 STL

두번째로 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코드랑 정렬하는 부분만 비교해서 살펴보자)

같은 결과가 잘 나오는 것을 확인할 수 있다.

0개의 댓글

관련 채용 정보