본문 바로가기

Program Language and Algorithm

(17)
소프트웨어 엔지니어에게 수학이 중요한 이유 (부제 : 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..
메모이제이션 : 중복 연산 해결 (러시안 페인트공 알고리듬) 이 포스팅에서는 메모이제이션을 논하려고 합니다. 메모이제이션은 중복되는 연산의 결과를 저장하여, 연산 횟수를 줄이는 소프트웨어 엔지니어링 기술입니다. 소프트웨어 개발 중에는 항상 하게 되는 선택이 cpu를 사용하는가 메모리를 사용하는가입니다. 이 기술은 컴퓨팅 리소스 중 cpu의 사용량을 줄이는 대신 메모리의 사용량을 늘려줍니다. 메모이제이션을 잘 사용하면 다양한 알고리듬을 가속화할 수 있는 아주 중요한 기술입니다. 긴 글과 개념적인 설명은 여기서 마치겠습니다. 자세한 설명을 원하시면... 전공서적이나 위키피디아를 참고하세요. 여기선 간단한 예제로 설명하겠습니다. 사용하는 예제는 피보나치수열입니다. 피보나치 수열의 알고리듬 구조상 설계는 자연스럽게 재귀 호출이 되고, 메모이제이션을 이용하면 구동 시간을 ..
러시안 페인트공 알고리듬 오래전 조엘 스폴스키 의 책을 보면서 여러 가지를 배웠습니다. 그중 하나가 러시안 페인트공 알고리듬이었습니다. 지금은 아마도 누군가에게 책을 빌려 준거 같고, 개요만 머릿속에 남아 있습니다. 기억을 더듬어 알고리듬을 설명하고, 해결 방법과 함께 짧은 포스팅을 하려고 합니다. 러시안 페인트공 알고리듬(정확한 내용이 필요하시면 책을 보시거나, 조엘의 블로그를 보거나, 다른 분들의 포스팅을 보세요. ) 어떤 건설 업자가 도로를 만들었습니다. 긴 도로가 완성되고, 이제 남은 일은 도로에 차선을 그리는 일입니다. 마침 도로의 시작위치에 러시안 페인트공이 운영하는 페인트 가게가 있습니다. 업자는 러시안 페인트공에게 차선을 그리는 일을 맡겼습니다. 첫째날 러시안 페인트공은 300미터의 차선을 그립니다. 업자는 결과에..