본문 바로가기

C++

(9)
소프트웨어 엔지니어에게 수학이 중요한 이유 (부제 : C++로 만드는 소수 판별 알고리듬 + 에라토스테네스의 체 ) "소프트웨어 엔지니어가 되는데 수학이 꼭 필수인 가요?" 라는 질문을 가끔 받아왔습니다. 그럴 때마다 제 답변은 같았어요. "꼭 필수는 아니지만, 고생을 줄이고 싶다면, 필수가 됩니다. 그리고 지금 굳이 안 해도 나중엔 자연스럽게 수학을 하고 있을 거예요." 였습니다. 소수 판별 이번에 소수 판별 알고리듬을 설명하려다 보니, 자연스럽게 위의 문답이 생각나더군요. 제목으로 쓴 "소프트웨어 엔지니어에게 수학이 중요한 가?"라는 질문에 정석적인 답변을 알고 싶으시면, 이 글 보다 컴퓨터 공학이나 수학과 교수님께 문의하세요. 이 글에서는 소수 판별 알고리즘을 점진적으로 설명함으로써 상기 질문에 대한 경험적인 지식을 담으려고 합니다. 그럼 처음에 소수 판별 프로그램을 만드는 대표적인 간단한 예시를 보죠. #inc..
C++로 만드는 숫자 야구게임 (소프트웨어 끼리 싸우기 : Inter Process Communication) C++로 만드는 숫자 야구 게임의 마지막 글 입니다. 이전 글에서 문제를 내는 알고리즘과 문제를 푸는 알고리즘을 만들었습니다. 2021.03.29 - [Program Language and Algorithm] - C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 숫자 야구 게임은 소프트웨어 엔지니어링에 대해 배우다 보면 한 번씩은 보게 되고, 또 만들게 되는 간단한 숫자 게임입니다. 문제를 내는 알고리듬은 반복문이나 조건문, 입출력 등의 기본 기 sbinroom.tistory.com 2021.03.30 - [Program Language and Algorithm] - C++로 만드는 숫자 야구 게임 : 문제를 푸는 알고리듬 C++로 만드는 ..
중복 없는 수열 만드는 알고리즘 ( C++로 만드는 숫자 야구 게임 ) 이번 글은 지난번 숫자 야구 게임 만들기에서 이야기했던 중복 없는 수열 만드는 알고리즘입니다. 2021.03.29 - [Program Language and Algorithm] - C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 숫자 야구 게임은 소프트웨어 엔지니어링에 대해 배우다 보면 한 번씩은 보게 되고, 또 만들게 되는 간단한 숫자 게임입니다. 문제를 내는 알고리듬은 반복문이나 조건문, 입출력 등의 기본 기 sbinroom.tistory.com 2021.03.30 - [Program Language and Algorithm] - C++로 만드는 숫자 야구 게임 : 문제를 푸는 알고리듬 C++로 만드는 숫자 야구 게임 : 문제를 푸는 ..
C++로 만드는 숫자 야구 게임 : 문제를 푸는 알고리듬 이전 글에서는 초록이(문제를 내는 알고리듬)를 만들었으니 이번엔 파랑이를 만들어 주려고 합니다. 2021.03.29 - [Program Language and Algorithm] - C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 숫자 야구 게임은 소프트웨어 엔지니어링에 대해 배우다 보면 한 번씩은 보게 되고, 또 만들게 되는 간단한 숫자 게임입니다. 문제를 내는 알고리듬은 반복문이나 조건문, 입출력 등의 기본 기 sbinroom.tistory.com 초록이는 간단했지만 파랑이는 조금 복잡합니다. 쉽게 만들면 쉽고 어렵게 만들면 어렵죠. 일단 가장 간단한 방법으로 만들어 보았습니다. 초록이는 문제를 내고, 검사 하고, 통보하는 게임의 심판..
C++로 만드는 숫자 야구 게임 : 문제를 내는 알고리즘 숫자 야구 게임은 소프트웨어 엔지니어링에 대해 배우다 보면 한 번씩은 보게 되고, 또 만들게 되는 간단한 숫자 게임입니다. 문제를 내는 알고리듬은 반복문이나 조건문, 입출력 등의 기본 기술에 대한 평가 방식으로도 이용됩니다. 문제를 푸는 알고리듬은 내는 알고리듬보다 조금 어려운 정도입니다. 굳이 하고 싶다면 여러 가지 기술을 사용해서 조금 더 똑똑한 알고리즘을 만들 수도 있습니다. 이 글은 숫자 야구 게임을 주제로 하는 글의 시작으로 여기선 내는 쪽을 다루려고 합니다. 그 후에 푸는 알고리듬을 다룬 뒤, 마지막으로 프로세스 간 통신 기술 인 인터 커뮤니케이션을 다뤄볼까 합니다. 그럼 숫자 야구 게임의 개념부터 설명하죠. 아래 그림을 참조해 주세요. 설명을 도와줄 초록이와 파랑이입니다. 숫자 야구 게임 숫..
Call by Value and Call By Reference 메모리 직접 접근이 가능한 소프트웨어 언어의 함수 호출 방법은 두 가지입니다. 하나는 call by value이고, 하나는 call by reference입니다. 자세한 개념은 전공서적이나 위키피디아를 통해서 습득하시는 것으로 하고, 이 글에는 간단한 설명과 예제가 따라옵니다. call by value는 입력 아귀먼트를 복사하는 함수입니다. 입력 아귀 먼트와 같은 데이터형의 지역 변수를 만들고, 값을 복사합니다. call by reference는 입력 아귀먼트의 주소 값을 참조합니다. 따라서 호출된 함수에서 아귀 먼트의 값을 변경하면, 호출 한 함수에서도 변경됩니다. 포인터를 전송하는 것과 같죠. 그럼 설명은 요렇게 간단하게 마치고, 예제로 넘어 가겠습니다. #include #include using n..
C++를 이용한 피보나치 수열 구현 (fibonacci) 이 포스트의 목적은 가끔 예제로 이용하는 피보나치 수열을 구현하는 방법에 대한 포스트입니다. 만들어 보니 7가지가 나왔으며, 버전에 따라 재귀 호출, 메모리제이션 등을 이용해 최적화하는 방식으로 구현됩니다. 먼저 피보나치수열을 알아봐야죠. 피보나치수열은 아래 규칙을 따르는 수열입니다. $$f_0 = 0$$ $$f_1 = 1$$ $$f_n = f_{n-1} + f_{n-2} \quad ( n \in\left \{2,3,4,\cdots\right\} )$$ 구조는 단순하지만 구현 시 오버플로우와 중복 연산에 주의해야 합니다. 그럼 먼저 간단히 구현해 보겠습니다. 별다른 소프트웨어 공학의 기술이 들어 가진 않지만 설계 시엔 약간 두통을 유발합니다. #include #include using namespace ..
배열의 초기화 ( memset) 일반적인 컴퓨팅 디바이스에서 배열의 초기화는 필요 없는 경우가 많습니다. 소프트웨어 엔지니어가 신경 쓰지 않아도 알아서 0으로 초기화해주기도 하고, 알고리즘 구조상 필요 없는 경우도 많습니다. 하지만 만약 Arm과 같은 프로세서를 이용한다면 특별히 초기화에 신경 써 줄 필요가 있기도 하고, 사실 초기화 시간이 오래 걸리는 작업도 아니기에 해주는 게 좋습니다. 먼저 C와 C++에서 모두 쓸수 있는 방법으로 시작하죠. 배열을 초기화하는 가장 간단한 방식은 아래 코드와 같이 반복문으로 초기화하는 거죠. 간단하고 가독성도 높습니다. 무엇보다 아래 코드에서와 같이 원하는 값으로 쉽게 설정할 수 있습니다.(input) #include using namespace std; const int N = 1024; int ..