본문 바로가기

분류 전체보기

2. 윈도우의 등록과 생성 최호성님의 VISUAL C++ 2008 MFC 윈도우 프로그래밍을 학습한 뒤 정리한 내용입니다. _tWinMain() 함수는 크게 세부분으로 나눌 수 있는데 첫 번째는 윈도우 응용 프로그램이 갖춰어야 할 기본요소 정의 및 윈도우 생성부분, 두 번째는 메인 메시지 루프 부분, 세 번째는 전달받은 메시지를 어떻게 처리할지 결정하는 윈도우 프로시저 함수 부분(WndProc())입니다. int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) _tWinMain() 함수의 인자- hInstance 응용 프로그램 자체를 식별, 정확히는 실행 파일의 이..
1. 윈도우 프로그래밍의 시작 최호성님의 VISUAL C++ 2008 MFC 윈도우 프로그래밍을 학습한 뒤 정리한 내용입니다. Visual Studio에서 HelloWorld라는 이름의 Win32 프로젝트 생성한 뒤 만들어진 HelloWorld.cpp 파일에 기초하여 정리된 내용입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPr..
15. 위상정렬 (Topological Sorting) 위상 정렬(topological sorting)은 유향 그래프의 꼭짓점들(vertex)을 변의 방향을 거스르지 않도록 나열하는 것을 의미합니다. 위상정렬 - 위키백과https://ko.wikipedia.org/wiki/%EC%9C%84%EC%83%81%EC%A0%95%EB%A0%AC 정의를 보아서는 쉽게 와닫지 않을듯하여 예시를 들어 설명하도록 하겠습니다. 스타크래프트를 플레이한다고 가정해보겠습니다. 게임에서 승리하기 위해서는 유닛을 생산하고 상대방을 공격하여 상대방의 모든 건물을 부숴야합니다. 유닛을 생산할 때에 더 높은 파워를 가진 고급 유닛을 생산하기 위해서는 고급 유닛을 생산할 수 있는 건물을 지어야하는데 단순히 원한다고 지을 수가 있는게 아니라 사전에 지어야하는 여러 건물들이 있습니다. 기초 건..
접근제어자 public, protected, default, private 접근제어자를 통해서 class간 변수 및 메소드 접근을 제어할 수 있다. public: 어떠한 조건에서도 모두 사용할 수 있다.protected: 같은 패키지 내에 존재하는 class나 상속 class에서 사용할 수 있다.defualt: 아무 것도 붙이지 않는 경우 default가 되며, 동일 패키지 내에 존재하는 class의 변수와 함수를 사용할 수 있다.private: 선언된 class 내부에서만 사용이 가능하다. 구체적인 테스트는 아래의 소스를 참고하자. package package1; import package2.Class3; public class Class1 { public String publicVar1; protected String protectedVar1; String defaultVa..
파이썬으로 웹 크롤러(Web Crawler) 만들기 (3) 본격적으로 파이썬을 이용하여 웹 크롤러를 개발해보도록 하겠습니다. 우선 PyCharm을 실행해서 프로젝트를 생성해줍니다. 프로젝트명은 WebCrawler로 하도록 하겠습니다. 프로젝트 생성후에는 프로젝트 내에 Python 파일을 생성해줍니다. 파일명도 동일하게 WebCrawler로 해줍니다. 이런 화면이 나온다면 개발을 위한 환경이 준비된 것입니다. 먼저 개발을 위해 사용할 라이브러리들을 import해주도록 하겠습니다. requests, bs4, pandas 세 개의 라이브러를 import 해줍니다. 만일 import에 실패했다면 정상적으로 설치가 안된 것입니다. PyCharm을 통해 설치가 가능하므로 설치가 안된 라이브러리는 설치해주시고 제대로 설치가 안되신다면 1번 글을 참고하셔서 마저 설치해주시기 ..
파이썬으로 웹 크롤러(Web Crawler) 만들기 (2) 웹 크롤러를 개발하기에 앞서 준비해야할 것이 두가지가 있습니다. 첫번째는 request를 날릴 url입니다. 무작정 우리가 아는 url에다 검색어를 붙인다고 해서 요청이 정상적으로 날아가는 것은 아닙니다. 원하는 검색결과를 반환해줄 url을 구성해야합니다. 일단 검색 결과가 나오게 될 사이트로 접속합니다. 저는 검색어 입력시 그에 관련된 Daum 뉴스 제목들을 가져오도록 하겠습니다. 접속하셨다면 원하는 검색어를 입력한 뒤 url을 확인해줍니다. 위 url이 Daum 뉴스에서 비트코인이라는 검색결과가 나오게하는 url입니다. 맨끝의 'q=비트코인'이라는 부분이 검색어에 해당하는 파라미터라는 것을 쉽게 알수 있습니다. 하지만 url에서는 현재 몇번째 페이지의 결과인지는 표시가 안되어있습니다. 이럴 때는 두번..
14. 인덱스 트리(Indexed Tree) 인덱스 트리는 순서를 갖는 정보들이 주었을 때, 구간의 대표값이나 연산 결과를 빠르게 얻을 수 있는 자료구조입니다. 구간의 정보를 빠르게 파악할 수 있는 이유는 정보들을 2진 트리로 구성하여 두 개 노드의 부모노드에 대표값이나 연산결과를 저장했다가 구간이 주어졌을 때 최대한 커버가 가능한 구간 정보부터 압축적으로 정보를 추출하기 때문입니다. 아래와 같이 8개의 정보를 갖고 있는 배열이 주어졌다고 해봅시다. 1 ~ 8자리까지 각 배열의 자리에는 랜덤한 숫자가 주어져 있고 우리는 구간이 주어졌을 때 그 구간의 합이 얼마인지 알고 싶습니다. 1 2 3 4 5 6 7 8 3 2 8 1 2 3 5 6 만일 구간의 합을 구한다고 했을 때 단순하게 계산한다고 하면 매번 그 범위 내에서 for문을 이용하여 합을 구해야..
1102번: 발전소 - Baekjoon Online Judge 외판원 문제(TSP: Traveling Salesperson Problem)로 대표되는 NP-난해에 해당하는 문제이다. 외판원 문제는 여러 도시가 주어졌을때 외판원이 도시별로 이동하는데 드는 비용이 각각 다른 경우 모든 도시를 다 돌고오는데 드는 비용을 어떻게 최소로 만들 것인지를 물어보는 문제이다. 외판원 문제 - 위키백과, 우리 모두의 백과사전https://ko.wikipedia.org/wiki/%EC%99%B8%ED%8C%90%EC%9B%90_%EB%AC%B8%EC%A0%9C 발전소 문제도 이와 유사하다. 여러 발전소가 주어지고 발전소가 켜져있는 경우 그 발전소를 이용하여 다른 발전소를 켤 수 있고 그때의 비용은 각각 다르게 주어진다. 이때 최소한 켜져야하는 발전소의 숫자가 주어졌을 때 그 발전소 ..