일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CS
- 지식나눔강좌
- c
- 이지스퍼블리싱
- 프로그래밍
- 티스토리
- c++
- 포인터
- VS ERROR
- c#
- doit코틀린프로그래밍
- Programming
- 알고리즘
- Tips강좌
- 문법
- Tips프로그래밍강좌
- Kotlin
- 연산자
- 리뷰
- Windows
- Javascript
- Visual Studio
- 백준
- 김성엽
- tipssoft
- 함수
- Direct2D
- Desktop
- Win32
- 배열
- Yesterday
- Today
- Total
목록DEV (266)
F.R.I.D.A.Y.
brute force vs. KMP 알고리즘의 속도를 비교해봤다.제한 조건은 다음과 같다.https://en.wikipedia.org/wiki/algorithm 문서 100개 분량(복사 붙여넣기 X100)검색 문자열 "algorithm" 위 제한 조건으로 C#에서 탐색한 결과 대략적으로 아래의 결과를 보였다.bruteforce - 100msKMP algorithm - 50ms 1회 실행의 실행시간 비가 bruteforce:KMP algorithm = 2:1이 나온다// bruteforceList list = new List();string str = richTextBox1.Text;string pattern = textBox1.Text;for(int i = 0; i // KMP algorithmpriva..

제한시간 내 순열 만들기 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 순열 자체를 구하는 속도는 빠르지만, 이를 하나씩 출력하는 과정에서 속도를 잡아먹는 것이 많기 때문에 stringstream에 출력할 문자열을 저장한 뒤, 최종에 한번 출력하도록 하여 속도 향상을 꾀함 #include #include #include using namespace std; int visited[9]; int permutationList[9]; stringstream ss; void bt(int maxValue, int..

C/C++로 작성한 Win32 프로그램의 exe 파일 아이콘 변경하기 리소스 파일 추가 아이콘 변경을 위해서는 리소스 파일을 추가 해야한다. 프로젝트에서 [새 항목 추가 - 리소스 - 리소스 파일]을 선택해 프로젝트에 추가한다. 리소스 뷰[# Ctrl + Shift + E]에서 리소스를 추가한다. 프로그램의 아이콘을 변경할 것이므로 아이콘을 추가한다. 가져오기를 통해, 원하는 아이콘을 별도로 추가할 수도 있다. 추가가 완료되면 세 번째 사진과 같이 IDI_ICON1 등의 추가된 아이콘이 발생함을 알 수 있다. 이제 솔루션 탐색기[# Ctrl + Alt + L]에서 Resource.rc의 코드 보기[# F7]를 통해 코드 편집을 한다. 코드 편집기를 열면 오른쪽 이미지와 같이 리소스 관련 내용이 소스코드 ..

C#에서 비클라이언트의 ownerdraw를 하려면WinApi가 필수일 듯. https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area 비클라이언트 영역 - Win32 apps 시스템은 제목 표시줄, 메뉴 모음 또는 창 프레임과 같은 비클라이언트 영역의 일부를 업데이트해야 할 때마다 WM\_NCPAINT 메시지를 창으로 보냅니다. docs.microsoft.com protected override void WndProc(ref Message Msg) { Rectangle rect; switch (Msg.Msg) { case WinApi.Message.WM_NCACTIVE: case WinApi.Message.WM_NCPAINT: rect = new..

Visual Studio만큼 괜찮은 IDE가 없어서[# 진짜 다른 IDE로 못 넘어가겠다..] 리눅스 과제를 할 때도 종종 Visual Studio를 이용해서 코드를 쓰곤 한다. 기존 반反 오픈소스 진영의 대표격인 Microsoft에 새로운 CEO로 사티아 나델라가 취임하면서 그 행보가 바뀌었다. Windows PE 프로그램을 Linux에서 실행할 수 있도록 해주는 Wine의 개발에 직접적인 도움을 준다던지, Github를 인수해버린다던지.. 몇 해 전에는 .Net을 오픈소스로 풀어버렸던 적도 있다. WSL 설치하기 돌아와서, Windows에도 변화가 생겼다. Windows kernel 위에서 Linux 커널이 돌아가도록 업데이트가 이뤄졌다. 이름이 WSL[# Windows Subsystem for Li..

레지스트리 시작 프로그램에 관리자 권한 프로그램 등록 시 발생하는 문제 해결하기 시작 프로그램 Windows 시작 프로그램은 개발자 입장에서 상당히 매력적인 기능일 것이다. 내 프로그램이 OS 시작과 함께 돌아간다고? 사용하는 시간이 늘어나는 것이나 마찬가지니... 가장 간단한 등록 방법은 Startup 폴더에 해당 프로그램을 넣어두는 것이다. 바로가기도 아마 실행이 될것인데, 개발할 때는 주로 Startup 폴더에 넣는 것보다 선호되는 방법이 있으니, 아무래도 레지스트리 등록일 것이다. .Net 차원에서도 Reg Key에 접근/수정하는 기능을 제공하니 편하기도 편하고.. 그러나, 이러한 편의를 받는 프로그램은 일반 프로그램에 한정한다. 필요 권한이 requiredAdministrator 미만(asInv..

metroUI는 Microsoft에서 개발한 UI 프레임워크로, Windows 8부터 시작한 타일 디자인의 .NET 버전이라고 볼 수 있겠다. UI metroUI의 기본 구성은 아래와 같다. 각종 타일 버튼부터 과거부터 내려온 컨트롤의 외형을 모두 벗겨내고, 좀더 현대적인 디자인을 가지고 있다. 이중 궁금한 것은 이 UI가 어떤식으로 구성되어있느냐는 점이었다.[# 직접 컨트롤 디자인 하고 싶었으니까!] 하루 동안의 분석결과를 보자면, MetroForm은 Form의 상속체로서 FormBorderStyle을 None으로 두고, 상단 최대/최소 버튼 및 닫기 버튼을 포함한 모든 디자인을 Client 영역 안에 그려놓은 것이다. Caption의 처리 더 궁금한 부분은 Window의 이동 작업이었다. 대개 C# ..

C#에서 네이티브 코드인 WinAPI를 이용해 무언가를 작성하려 할 때, 꼭 주의해야 할 점이 있다. 관리되는 코드 C#은 C/C++처럼 기계어로 컴파일되는 것이 아닌 .NET 혹은 .Net Framework에서 작동하는 바이트코드, CRL(Common Runtime Language)로 변경된다. C/C++과 C#의 가장 큰 차이를 고르라면 아마도 메모리를 사용자(개발자)가 직접 관리하는가에 대한 여부일 것이다. 여태 알듯 C/C++은 개발자가 객체의 메모리 관리를 직접 해야 하는 것과 달리, C#의 경우 언어 사용자가 직접 메모리 관리를 할 필요가 없다. 내부적으로 GC(Garbage Collector)가 돌아가면서 사용되지 않는 메모리를 제거하는 방식으로 누수 메모리를 자동으로 잡는다. 이렇게 .NE..

C#에서 WinAPI로 뭔가를 하려고 했더니 보호된 메모리라고 예외를 뱉는다. 사용하려던 Windows API는 GetWindowText(HWND hWnd, LPSTR lpstring, int nMaxCount); 그래서 C# 코드는 이렇게 했었다. [DllImport("user32.dll", SetLastError = false)] public static extern int GetWindowText(IntPtr hWnd, out StringBuilder lpText, in int maxCount = 256); // ... StringBuilder windowTitle = new StringBuilder(256); wa.GetWindowText(hWnd, out windowTitle, windowTit..

코드에서 메서드를 지웠는데 갑자기 오류가 난다. WinForm으로 작업을 하다가 실수로 Form을 눌러서 메서드가 나와서, 필요 없는 메서드를 지웠더니 위 이미지처럼 오류가 발생했다. 원인 디자이너 코드와 실제 메서드 코드가 상이하기 때문에 발생하는 문제다. WinForm은 디자이너라는 시스템으로 코드 및 UI 관리가 이루어진다. WinForm 디자이너는 개발자의 편한 프로그래밍을 위해 만들어졌지만, 일단은 프로그램이라서 사람처럼 '알아서'가 안된다. CS 파일과 UI 및 이벤트 바인딩[# 컨트롤과 메서드 연결]을 위한 Designer파일이 분리되어있기 때문에 사용자가 직접 메서드만 삭제를 하면 Designer 파일과 CS 파일이 서로 충돌이 발생하면서 위와 같은 문제를 일으킨다. 해결 위 문제를 해결할..