일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Win32
- 프로그래밍
- Windows
- Visual Studio
- Tips강좌
- 함수
- 연산자
- Desktop
- 김성엽
- tipssoft
- 배열
- 이지스퍼블리싱
- 포인터
- Programming
- Kotlin
- CS
- 티스토리
- 지식나눔강좌
- 알고리즘
- Direct2D
- c++
- VS ERROR
- Tips프로그래밍강좌
- 백준
- doit코틀린프로그래밍
- c
- 리뷰
- Javascript
- 문법
- c#
- Yesterday
- Today
- Total
목록DEV (266)
F.R.I.D.A.Y.

사용자 지정 서식지정자를 구현해 printf 이진수 출력하기 printf는 C언어의 스탠다드 라이브러리에서 출력을 담당하는 함수로 서식 지정자를 가지고 있다. 서식지정자 printf는 기본적으로 바이너리 출력을 지원하지 않는다. 즉, 이진수 출력을 지원하기 위해서는 따로 함수를 만들어 별도로 작성을 하거나, 직접 printf의 모든 기능을 구현하면서 이진수 출력에 대한 코드를 넣어서 라이브러리를 새로 만들어야한다. 이진수 출력의 문제나, 혹은 직접 커스텀 서식지정자를 만들고 싶을 때도 동일하게 발생하는 문제다. 이진수 출력용 서식지정자 정하기 제공되는 서식지정자에는 이진수 형식으로 출력을 지원하는 서식지정자를 제공하지 않으므로, 새로운 함수를 만들어 기존 printf 함수와 혼용해 코드를 작성하면 그 길..

가장 긴 증가하는 부분 수열 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 코드 #include int main(void){ int size, max = 1; int data[1000], dp[1000]; scanf("%d", &size); for(int i = 0; i d..

계단 오르기 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 설명 DP 공부를 하면서 느낀건데, 규칙성이 있다면 점화식을 구하는게 급선무?라 생각한다. 일단, 문제에서 규칙을 정해주었기 때문에 규칙을 보면 다음과 같다. 여기에서 중요한 것이 (3)인데, 마지막에 대한 설명이 존재하기 때문이다. 따라서 마지막 규칙을 기반으로 하면 다음과 같다. dp[i] = dp[i - 3] + data[i - 1] + data[i]; dp[i] = dp[i - 2] + data[i]; 배열 dp는 여태 계산상에서 가장 높은 수를 찾은 데..

모니터 위치 지정 Windows에서는 여러 개의 모니터를 사용할 때 각 모니터의 위치를 정할 수 있다. 나의 경우에는 1번 모니터를 메인으로 위에 2번 모니터가 존재하는 방식으로 사용한다. 이런 상황에서, 멀티 모니터 프로그래밍을 하려면 각 모니터의 위치를 찾아야하는 문제가 있다. 그러나 바탕화면을 담당하는 WorkerW 프로세스의 영역을 구하면 다음과 같다. 각 모니터 모두 FHD 해상도에 세로로 이어 붙인 상황이기 때문에 크기는 1920×2160이 맞다. 그러나 이를 Windows 좌표로 분석하면 다른 값이 노출된다. 위 두 장의 사진은 생성한 윈도우위 좌표를 윈도우 안에 출력해주는 코드이다. 메인으로 사용하고 있는 1번[# 티스토리가 출력되는 화면, 하얀 바탕] 모니터의 좌-상 위치는 (0, 0)이..

실제 기능 구현 윈도우 생성 이전 두 개의 포스트를 통해 그리기 작업과, 맵데이터 관리/처리는 해결했다. 이제, 그래픽 작업과 맵데이터를 작동시키기 위한 메인 윈도우를 구성하자. 멤버 윈도우에서 관리할 멤버들은 다음과 같다. DrawTool* TextTool* IMap* D2D1_POINT_2F MovePoint size_t window_padding, window_gap 여기에서 MovePoint는 메서드 처리 후, 그리기 처리를 할 때 필요다. 그리고 window_padding과 window_gap은 각 블럭 사이 간격과 window border와 블럭간의 거리를 상수로 처리한 것이다. 메서드 이벤트 처리를 위한 메서드는 총 6개로, 다음과 같다. OnLButtonDown OnRButtonDown O..

지뢰찾기의 각종 정보를 저장하고 관리하는 맵데이터 맵 데이터 지뢰찾기를 구성하려면 블럭이 열린 상태인지, 선택된 상태인지, 열리지 않은 상태인지를 저장하는 공간과 함께 해당 요소가 지뢰로 동작하도록 처리가 되었는지 저장하는 상태 정보 저장용 블럭이 필요하다. Block 지뢰 찾기를 구성할 때 각 셀의 정보를 저장하기 위해 구현한 클래스이다. Block 클래스에서 관리해야할 항목은 총 세가지이다. 블럭의 지뢰 활성화 여부 블럭의 공개 상태 블럭 주변의 지뢰 수 마지막 항목인 주변 지뢰 수의 경우에는 굳이 관리를 하지 않아도 상관은 없지만, 일단 한번에 처리를 해야 나중에 연산을 줄일 수 있기 때문에 처리를 했다. 포함 멤버 위에서 설명한 데이터를 관리하기 위해 총 세 개의 멤버로 구성되어 있다. BLOCK..

지뢰찾기 그래픽 처리를 위한 구성 그리기 작업 GUI 프로그래밍을 위해서 그리기 툴을 구성해봤다. 그리고, 해당 그리기 툴을 다른 곳에서도 이어서 사용할 수 있도록 그리기 정보를 담고 있는 객체를 생성 및 이들을 관리하는 클래스를 구성해봤다. 그리기 툴 DrawTool 그래픽 엔진은 Direct2D를 이용했고, 이를 다른 프로그램에서 쉽게 이용할 수 있도록 정형화했다. 먼저 구성할 메서드는 다음과 같다. OnPaint(DrawSet*) OnSize 위 두 메서드는 그리기 작업에 영향을 주는 WM_PAINT와 WM_SIZE 메시지가 들어왔을 때 해당 프로시저에서 각각 연결해주면 된다. OnPaint에 인자로 넘기는 은 하단에 설명을 잇는다. 생성자 ID2D1HwndRenderTarget을 생성할 때는 기본..

지뢰찾기 지뢰찾기는 정말 고전 게임이다. 동시에 게임의 기본을 배움에 있어 도움이 될 것 같기도 하다. 구현 또한 그리 어렵다고 느끼지 않기 때문이다.[# 적어도 내가 느끼기엔 그랬다.] 지뢰찾기 룰은 게임상 존재하는 모든 지뢰를 찾아낸다는 점을 제외하고는 잘 몰랐다. 때문에 지뢰찾기를 구현하기에 앞서 게임의 룰을 생각했다. 지뢰찾기 룰 생각한 지뢰찾기는 아래와 같았다. 게임 클리어 조건은 애매모호한 점이 많아서 구글에서 인스턴스 게임으로 제공하는 지뢰찾기 룰을 이용했다.[# 게임은 그렇게 못해서, 클리어 조건을 체크하는데 시간이 좀 걸렸다.] 주변 팔방[# 상하좌우 네 방향 및 그 대각선 네 방향]에 지뢰가 존재할 경우 그 수를 세고, 열었을 때 보여준다. 주변 팔방에 지뢰가 존재하지 않는경우, 주변 ..

메모리 관련 작업을 하면 주로 보이는 C6385 발생 재현 C6385 경고는 주로 메모리 할당 관련 작업을 할 때 일어납니다. MS 공식 문서의 내용을 보면 접근이 허용된 메모리 공간을 벗어난 경우에 이런 경고를 띄우는 것으로 안내하고 있습니다. int arr[10]; int i = 0; while(i

이미 시중에 CS로 만들어진 ADBlock 프로그램이 존재하지만 기억나지 않을 정도로 익숙해져버린 카카오톡 PC AD. 존재하는것은 상관 없지만, 창의 일정 부분을 저렇게 차지하다보니 공간 낭비가 아닐 수 없다. 이미 시중에 C#으로 만들어진 ADBlock 프로그램이 존재하지만, 원리나 한번 알아보자고 만든 코드. #include #include #include using namespace std; int main() { HWND kakao; kakao = FindWindowW(L"EVA_Window_Dblclk", L"카카오톡"); char titleKao[100]{}; GetWindowTextA(kakao, titleKao, 99); cout