본문 바로가기

분류 전체보기

(308)
[WinAPI] PeekMessage와 윈도우 창 크기 설정 // 기본 메시지 루프입니다: while (g_bLoop) { //PeekMessage는 메세지가 메세지 큐에 없어도 바로 빠져나온다. //메세지가 있을 경우 true 없을 경우 false가 된다. //메세지가 없는 시간이 윈도우의 데드 타임이다. if(PeekMessage(&msg, nullptr, 0, 0,PM_REMOVE)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } //윈도우 데드타임일 경우 else { static int iCount; ++iCount; if (iCount == 30000) { iCount = 0; Run(); } } } Pe..
[WinAPI] 도형 그리기, 마우스 좌표 case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); //출력하기 위한 도구 //텍스트 출력 (x좌표,y좌표,텍스트,크기) TextOut(hdc, 50, 50, TEXT("win32"), 5); //사각형 출력 (왼쪽위좌표,오른쪽아래좌표) Rectangle(hdc, 100, 100, 200, 200); //원 출력 (왼쪽위좌표,오른쪽아래좌표) Ellipse(hdc, 100, 100, 200, 200); //선 그리기 MoveToEx(hdc, 300, 100, NULL); //시작좌표 LineTo(hdc, 400, 150); //끝좌표 MoveToEx(hdc, 100, 400, NULL);//다른 선을 그릴 때마다 시작좌표 새로 설정해야 함 ..
[WinAPI] 기본 윈도우 창 HINSTANCE hInst; // 현재 인스턴스입니다. WCHAR szTitle[MAX_LOADSTRING]; // 제목 표시줄 텍스트입니다. WCHAR szWindowClass[MAX_LOADSTRING]; // 기본 창 클래스 이름입니다. hInst는 윈도우의 인스턴스 핸들을 나타내는데 이것은 운영체제가 프로그램을 식별하기 위한 번호이다. 만약 윈도우에 메모장 2개가 켜져있다면 두 메모장을 인스턴스 핸들로 구분할 수 있다. //main함수 역할 int APIENTRY wWinMain(_In_ HINSTANCE hInstance, //h가 붙으면 핸들, 운영체제가 프로그램을 구별하기 위한 식별번호 _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _..
[백준] 1260번 - 그래프, BFS, DFS 그래프는 정점과 간선으로 이루어진 자료구조이다. 트리는 그래프의 일종이다. 하지만 그래프는 정점간 간선이 없을 수도 있고 루트 노드, 부모 노드 개념도 존재하지 않는다. 그래프는 인접 배열과 인접 리스트로 구현할 수 있다. 인접 배열은 2차원 배열에서 정점 i와 j가 이어져 있다면 ar[i][j]=1의 형식으로 1로 체크하고 이어져 있지 않다면 0으로 작성한다. 인접 리스트는 연결되어 있는 정점의 정보만 저장한다. 인접리스트의 구현은 Vector 배열로 할 수 있다. vector jungjeom[MAX]; queue Q; bool visit[MAX]; jungjeom[i] 벡터는 정점 i 와 간선으로 이어진 정점들을 가지고 있다. BFS를 위해 큐를 생성하고 visit으로 정점을 방문했는지 안했는지 확인..
[백준] 11279번 - 우선 순위 큐 #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); priority_queue pq; int n; cin >> n; for (int i = 0; i > x; if (x == 0) { if (!pq.empty()) { cout
[백준] 1920번 - 이분 탐색 #include #include #include using namespace std; int n, m; vector ar1, ar2,answer; int binarySearch(int key) { int left = 0; int right = n - 1; for (;;) { int mid = (left + right) / 2; if (ar1[mid] == ar2[key]) return 1; else if (ar1[mid] > ar2[key]) right = mid - 1; else if (ar1[mid] right) return -1; } } int main() { cin >> n; for (int i = 0; i < n; i++) {..
[백준] 2630번 - 분할 정복 알고리즘 #include using namespace std; int n; int** ar; int blue= 0,white = 0; void ColorPaper(int x, int maxX, int y, int maxY) { bool re = false; int init = ar[y][x]; for (int i = y; i < maxY ; i++) { for (int j = x; j < maxX; j++) { if (ar[i][j] != init) re = true; } } if (re) { int size = maxX - x; ColorPaper(x, x + size / 2, y, y + size / 2); ColorPaper(x + size / 2, x + size, y, y + size / 2); Colo..
[백준] 2750번 - 퀵 정렬 #include #include #define SWAP(a,b) { int t;t=a;a=b;b=t; } using namespace std; void QuickSort(int* ar, int num) { int left, right; int key; // 구간이 1이면 정렬 끝 if (num key) { right--; } if (left >= right) break; // 좌우가 만나면 끝 SWAP(ar[left], ar[right]); } SWAP(ar[left], ar[num - 1]); // 기준값과 i위치의 값 교환 QuickSort(ar, left); // 왼쪽 구간 정렬 QuickSort(ar + left + 1, num - left - 1); // 오른쪽 구간 정렬 } int main()..