티스토리챌린지 7

WindowApi 6강 - range기반 for문의 주의점

range기반의 for문의 경우는 메모리를 참조하여 그 공간을 순회한다.하지만 vector의 경우 사이즈가 늘어나면서 capacity가 커지게 되면 새로운 메모리 공간에 할당받게 되어 메모리 주소가 달라지는 경우가 발생하기때문에 for문 도중 벡터의 크기가 늘어가게되면 시스템이 종료된다예를들으면 이러한 경우다for(auto& a : myVec){ a = 1; myVec.push_back(1);}또는 멀티쓰레드 혹은 비동기 환경에서 이러한 에러가 발생할 수 있기 때문에 이를 방지하기 위해서는 락을 걸어주거나 for문이 다 돈다음 myVec의 push_back을 보장해 주는것이 필요해 보인다 그것도 귀찮다면 인덱스 방식의 for문을 사용하면 원하는 결과는 아니겠지만 시스템 종료는 되지 않는다

windowAPI 2024.11.23

WindowAPi 5강 - SceneManager

현재 진행되고 있는 Scene을 제외한 다른 리소스들까지 미리 힙메모리에 올려두는것은 메모리 낭비가 심하기 때문에 따로 씬을 구성하고 씬마다 가지고 있는 오브젝트들을 저장한뒤 이 오브젝트들을 씬이 전환될때 파괴하고 다시 할당해 주는 형식을 작성해 보자 1. SceneManager매니저의 역할은 씬들의 초기화 및 초기 씬 선택을 진행할 것이다void CSceneManager::init() { // 씬들을 초기화 해준다 m_scenes[(UINT)SCENE_TYPE::START] = new CStart_Scene(); m_scenes[(UINT)SCENE_TYPE::START]->SetName(L"Start"); m_pCurScene = m_scenes[(UINT)SCENE_TYPE::START]; m_p..

windowAPI 2024.11.19

WindowAPI 2일차 - 비동기 입력 및 싱글톤

저번에 일반적인 WindowAPI를 사용하여 사각형을 그려봤지만 이 방식은 매번 윈도우의 메세징 시스템을 이용하여 그려야 되며 InvalidateRect를 계속 호출해야 하는 상황이 발생하였다.게임에서는 이러한 메세징 시스템을 이용하지 않고 비동기 방식의 키 입력을 사용하여 주로 이를 처리한다고 한다 1. 비동기 방식으로의 전환이것을 구현하지 위해서는 SendMessage의 경우는 메세지가 있는 경우만 콜벡이 발생하므로 메세지 발생 이외의 작업을 처리하기가 어렵기 때문에 peekMessage를 사용하여 원할하게 프로그램이 진행되게 작업한다. while (true){ if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { if (WM_QUIT == msg.message..

windowAPI 2024.11.18

WindowAPI 1일차 - 사각형 그리기

https://www.youtube.com/watch?v=MJ31abxA7A0&list=PL4SIC1d_ab-ZLg4TvAO5R4nqlJTyJXsPK&index=7위 강의를 보면서 정리중입니다. window api의 에서 알고 있어야 되는 몇가지 변수와 함수를 정리해보자//핵심 변수HWND // 현재 윈도우 창의 번호를 저장해 둔다HDC // 랜더링 할수 있는 Device IDHPEN // 펜의 색을 지정하는 Device IDHBRUSH // 브러쉬의 색을 지정하는 DeviceID//핵심함수SelectObject(HDC, ??) // HDC에 ??을 설정해 줍니다 return -> 원래 ??DeleteObject(??) // ??을 삭제해 줍니다GetStockObject(??) // 미리 생성되어 있는 ..

windowAPI 2024.11.17

백준 28139 - 평균구하기

해결과정 - 확률a와 b로 이루어진 선분이 몇번 출현하는지 안다면 쉽게 풀수 있는 문제였다.a,b를 제외한 나머지를 일렬로 배치하는 방법은 (n-2)! 이며 배치한 공간중 a,b가 들어갈 수 있는 공간은 n - 1개로 a, b선분은 총 (n - 1)!번 등장하게 된다.따라서 각 점들끼리 의 거리를 한번씩 더해준뒤 출현횟수인 (n - 1)!을 곱한뒤 a,b b,a 양방향을 고려하여 2를 곱한뒤 총 개수 n!으로 나눈다면 답이되는 재미있는 문제였다 #include #define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);typedef long long ll;using namespace std;class Point {public: int x,..

백준 - 2866 문자열 잘라내기

해결과정 - 딕셔너리핵심은 아래의 문자부터 확인하여 같은 같은 문자가 있을 경우 그 열에 해당하는 문자를 확인해 나가는 것을 반복하는 것이였다 아이디어는 간단하여 해결은 쉬웠다 대체로 다른 사람들의 코드를 확인해 보니 이진탐색 방식과 해쉬를 사용하여 풀었고 R과 C의 값이 작아 완탐으로도 충분히 풀리는 문제였지만 내 코드가 메모리 측면에서는 별로지만 시간 측면에서는 효율적이라고 생각들었다#include#define Fast ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);using namespace std;vector inputs;int result = 0;//아래부터 확인하며 같은 문자열의 최고위를 확인한다void dfs(vector c..