전체 글 140

백준 - 괄호의 값 (C++)

문제 : https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제설명 괄호가 나오는 문제이다. 괄호가 나오는 문제는 왠만하면 스택을 사용하고, 여기서는 temp 변수가 핵심이다. 알고리즘 1. 열린 괄호가 나오면 stack에 push하고 괄호 모양에 따라 temp에 특정 값을 곱해준다. 분배 법칙이라 생각하면 이해하기 쉽다. 2. 닫힌 괄호가 나오면 바로전에 닫힌 괄호에 맞는 열린괄호가 있으면 result에 값을 더해주고 조건이 틀리면 break..

C++ - MFC 기초 클래스

MFC 콘솔 응용 프로그램 C/C++ 언어에 대한 지식만 있으면 곧바로 실습 가능 상당수의 MFC 클래스 사용 가능 (유틸리티 클래스, 집합클래스, 파일 입출력 클래스 등) 알고리즘 개발 시 유용 (GUI 배제한 간편한 프로그래밍 prinf() 등을 이용한 편리한 확인 가능) 실행 파일 생성 과정 컴파일러(console.h, stdafx.h, console.cpp, stdafx.cpp, resource.h) -> console.obj, stdafx.obj 리소스컴파일러(console.rc, 각종리소스(문자열,아이콘), resource.h) -> console.res 컴파일러 + 리소스컴파일러 -> 링커(API & MFC 라이브러리 , C/C++ 라이브러리) -> 실행파일(console.exe) 데이터 타..

C++ - SDK와 MFC 프로그래밍

MFC 프로그램 기본 골격 응용프로그램 클래스 정의 메인(=프레임) 윈도우 클래스 정의 응용 프로그램 객체 선언 메시지 맵 선언 -> 메세지 맵 부분은 afxmsg.h에 정의되어 있다. CHelloApp theApp; ---> int WINAPI WinMain() //MFC 라이브러리 내부에 숨겨진 프로그램 실행 시작점 { ptr = ... // 응용 프로그램 객체의 주소값으로 변수 ptr 초기화 Bool CHelloApp::InitInstance() { InitInstance(); // 초기화: 각종 초기화 작업과 더불어 메인 윈도우 객체 생성 //-> 메인 윈도우 객체의 생성자에서 // 운영체제 수준의 실제 윈도우를 만든다. } CMainFrame::CMainFrame() { } void CMainF..

C++ - MFC 개요

운영체제 컴퓨터 주기억장치에 상주 컴퓨터 시스템의 자원관리 응용프로그램 수행제어 사용자와 컴퓨터 HW 간의 인터페이스 담당 관리하는 자원 - CPU, 기억장치, 입출력장치 등 윈도우 운영체제의 특징 Graphic User Interface 메시지 구동 구조 멀티 태스킹 - 운영체제가 여러 개의 응용 프로그램을 동시 실행, 멀티스레딩 - 응용 프로그램 내부에서 여러 개의 스레드를 통해 실행 윈도우 으용프로그램의 특징 윈도우 API 윈도우 운영체제가 응용 프로그램을 위해 제공하는 각종 함수의 집합 -> HW를 제어하는데 필요한 함수 사용 메세지 핸들러 집합 - 메세지 핸들러는 메시지를 받았을 때 동작을 결정하는 코드 -> 메세지 핸들러 집합을 윈도우 프로시저라 부름 실행 파일과 DLL 집합 - DLL(Dyn..

C++ - 전처리기 지시어(조건부 컴파일)

C++ 실행 파일 만들어지는 순서 전처리 -> 컴파일 -> 오프젝트 파일 생성 -> 링커에 의해 실행파일 생성 전처리 위 순서 중 전처리는 컴파일 하기 전 소스 파일 내에 존재하는 전처리 지시어를 처리하는 작업을 뜻한다. 특징은 #기호가 붙는다. 조건부 컴파일 소스파일 중 조건에 부합하는 소스만 컴파일 하는 방법이다. 대표적으로 #if, #ifdef, #elif 등이 있다. 그 중 ifdef는 상수가 정의 되어 있다면 참이고 컴파일 한다. 아래는 예제이다. #define A 100 #ifdef A //실행된다. 나머지는 기존의 if else문 처럼 사용하면 된다.

C++ - Windows API와 MFC

Windows API API는 Windows의 OS가 제공하는 함수들이며 OS가 직접 사용하는 함수들이다. 즉 OS나 시스템 프로그래밍과 직접 통신해야 하는 저수준 프로그래밍 에서는 필수적이다. 특히 MFC는 Windows API 함수를 기반으로 만들어진거기 때문에 MFC를 사용하기 위해서는 반드시 알아야한다. BOOL : 단일 논리값 ex) 0,1 HANDLE : 커널 객체를 다루기 위한 핸들 ex) pointer와 비슷 DWORD : 정수(int) TCHAR : 문자(char) LPTSTR : 문자열(TCHAR * ) MFC 자료형 COLORREF : RGB값을 나타낼 수 있는 자료형이다. 아래는 예시이다. COLORREF colorValue = RGB(255,255,255); CString : MF..

MFC - CRuntimeClass

기능 클래스 이름을 사용하지 않고 객체를 생성한다. 메모리 상에 객체의 자료형을 검사한다. 메모리 상에 객체의 유효성을 검사한다. 객체 직렬화(Serialization)에 대한 정보를 제공한다. 사용조건 CRuntimeClass 구조체를 이 기능을 사용하려는 클래스의 static 멤버변수로 입력 CRuntimeClass 구조체를 static 멤버변수로 사용하기 위해 3가지 매크로 이용 선언부 : DECLARE_DYNAMIC, DYNCREATE, SERIAL 정의부 : IMPLEMENT_DYNAMIC 나머지 같음 뒤의 매개변수에 따라 기능이 달라짐 CObject로부터 상속받아야 한다. (CObject는 MFC의 최상위 클래스) MFC 내부에서 CRuntimeClass를 이용하는 객체에 접근할 때, CObj..

YOLO - Colab 이용해서 Custom 학습하기 (3)

파이썬을 이용하는 다른 플랫폼에 적용시키기 darknet에서만 사용하는 것이 아닌 라즈베리파이, 웹사이트, 모바일 등에 적용할 수 있다. 준비물은 3가지이다. CFG 파일 훈련된 weight 파일 names 파일 라이브러리와 YOLO 로드 import cv2 import numpy as np from matplotlib import pyplot as plt net = cv2.dnn.readNet("yolov4_19000.weights", "yolov4.cfg") #CFG 파일, weight 파일을 넣어준다. classes = [] with open("food30.names", "rt",encoding = "UTF8") as f: #클래스 이름을 따로 저장해준다. 이 형식은 클래스가 한글이름 일 때 불러오..

백준 - 마법사 상어와 파이어스톰 (C++)

문제 : www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 문제설명 단순 구현 시뮬레이션 문제이다. 배열 회전하는 방법과 BFS를 사용하면 쉽게 풀 수 있다. 알고리즘 1. 배열을 스캔하며 나눠진 구역마다 회전해준다. 회전 방법은 코드에 주석처리 해놨다. 2. 회전 후 인접한 4방향을 탐색하고 조건을 실행한다. 3. 모든 명령을 마친 후 BFS을 통해 가장 큰 덩어리의 개수를 구한다. 주의사항 1. 구역을 나누고 회전하는 부분이 까다로웠는데..

728x90