c++ 언어 A 부터 Z까지 - 첫번째




인사말

안녕하세요. 오늘은 C++ 학습일지의 첫 번째 게시글을 작성하게 되었습니다. 저는 기존에 Python, Go, Node.js, JavaScript 등의 언어를 다뤄본 경험이 있고, 실제 프로젝트나 실습에서도 사용해본 적이 있습니다. 그 덕분인지 현재로서는 C++을 학습하는 데 큰 어려움은 느끼지 않고 있습니다.

이번에는 C++을 학습하며 익힌 기본적인 문법들 — 제어문, 반복문, 그리고 int, float, double, char 등 기본 자료형에 대해 정리하고, 제가 가장 익숙한 언어인 Python과 함께 간단한 등차수열 합산 프로그램을 구현해보았습니다.


주제 소개

이번 실습에서는 동일한 시간 복잡도를 갖는 재귀 기반 등차수열 합산 프로그램을 C++과 Python 두 언어로 작성하였습니다. 입력값은 다음과 같습니다.

  • 초기값: 1

  • 공차: 1

  • 제한값: 100

재귀 함수를 활용하여 구현하였고, 각 언어가 같은 입력에 대해 어떤 성능 차이를 보이는지 측정해보았습니다.

C++ 코드


#include <stdio.h>
#include <time.h>

int inputFunc(int i) {
    int x;
    if (i == 0) {
        printf("초기값을 선택해 주세요: ");
    } else if (i == 1) {
        printf("공차를 선택해주세요: ");
    } else {
        printf("제한 값을 지정해주세요: ");
    }
    scanf("%d", &x);
    getchar();
    return x;
}

int Sum(int a, int d, int limit_val) {
    if (a < limit_val) {
        return Sum(a + d, d, limit_val) + a;
    } else {
        return 0;
    }
}

int main(void) {
    int a, d, limit_val;

    for (int i = 0; i < 3; i++) {
        if (i == 0) a = inputFunc(i);
        else if (i == 1) d = inputFunc(i);
        else limit_val = inputFunc(i);
    }

    clock_t start = clock();
    int total = Sum(a, d, limit_val);
    clock_t end = clock();

    printf("초기값이 %d이고 공차가 %d이며 제한값이 %d인 등차수열의 합은 %d입니다.\n", a, d, limit_val, total);
    printf("총 걸린 시간: %.6f초\n", (double)(end - start) / CLOCKS_PER_SEC);

    return 0;
}
아래 결과를 보니까 출력값도 잘 나왔고 시간도 0이 나왔내요.



Python 



# 등차수열의 합
import time

class Main():

  def __init__(self, a, d, limit_val):

    self.__a = a
    self.__d = d
    self.__limitVal = limit_val

  def SumFunc(self, a, d, limit_val):

    sum_value = 0

    if a < limit_val:
      sum_value = self.SumFunc(a + d, d, limit_val)

    else:
      return 0

    return sum_value + a

  def FinalFunc(self):

    return self.SumFunc(self.__a, self.__d, self.__limitVal)

# 입력
a = 0
d = 0
limit_val = 0

for i in range(3):

  if i == 0:
    a = int(input("초기값을 선택해 주세요: "))    

  elif i == 1:
    d = int(input("공차를 선택해주세요: "))

  else:
    limit_val = int(input("제한 값을 지정해주세요: "))


# 정답
m = Main(a, d, limit_val)
start = time.time()
answer = m.FinalFunc()1
end = time.time()
# 출력
print(answer)
print(f"총 걸린시간: { end - start }")

아래 결과를 보니 4950으로 C++보다 성능이 떨어진다는 것 을 알 수 있었어요.

성능 비교 및 결론


사실 제한을 100만 둔 이유가 있는데요

C++언어에 경우 10000을 정했을때 값이 나왔지만

python에 경우 1000만 정도만 되어도 스택오버플로우가 일어났습니다.




물론 C++도 100000에서는 스택오버플로우가 났으며 재귀 함수의 한계치로 예상이 갑니다.






마무리

오늘은 이렇게 C++ 언어 공부 일지를 작성해 보았습니다. 아직까지는 문법적인 부분이나 기본 구조에서는 큰 어려움 없이 따라가고 있지만, 앞으로는 메모리 관리나 포인터처럼 C++ 특유의 개념들을 접하면서 본격적인 난이도가 올라갈 것으로 예상됩니다.

그만큼 더 깊이 있게 고민하고 실습하면서 익숙해져야겠다는 생각이 들었습니다. C++ 학습을 함께 시작하신 분들께 이 글이 작은 참고가 되기를 바라며, 앞으로도 꾸준히 학습 내용을 정리해보도록 하겠습니다.

그럼 오늘도 모두 화이팅입니다!









개발자 김동완

개발, 비전공, 백엔드, 풀스택, 프로그래밍

댓글 쓰기

다음 이전