본문 바로가기

전체 글

(126)
WinSock2 기본통신 구현 창을 2개띄워 서로 채팅을 주고받을수 있는 간단한 채팅 프로그램 구현TCP/IP 기반 동기(블로킹) 멀티쓰레드 사용메시지를 주자마자 바로 받을수있도록 모델리스기반 프로시저 사용1. 헤더 추가framework.h에 헤더 추가//통신 헤더파일#include #include main 상단에 라이브러리 링크 추가#pragma comment(lib, "ws2_32.lib") 2. 윈도우 창 등록및 생성통신을 주고받을 윈도우창 등록모든건 동일하되 클래스의 이름과 사용할 프로시저명만 변경//사용할 윈도우 클래스를 등록ATOM MyRegisterClass(HINSTANCE hInstance){ WNDCLASSEXW wcex = { 0 }; wcex.cbSize = sizeof(WNDCLASSEX); wcex.styl..
정처기 실기 1. java, c++ 동적할당 차이Java 동적할당은 할당과 동시에 자동으로 초기화.boolean = falseint = 0double = 0.0object = null c/c++은 메모리만 할당. 쓰레기값이 들어감 하지만 ()를 붙이면 java와 똑같이 기본값으로 초기화int* i_p = new int(); //0double* d_p = new double(); //0.0bool* b_p = new bool(); //false 2. 파이썬 문법 list []: 배열과 똑같지만 리스트라고 읽음. 순서유지되며 인덱스접근가능 tuple(): 한번 선언이후 변경불가능. 반드시 ,를 붙여야만 tuple로 선언됨 const T arr[]로 봐도 무방ex) int t = (1,) -> 쉼표없으면 그냥 t = 1이..
WinAPI 기초 1. WinMainvs에서 제공되는 코드로 윈도우창이 돌아가는 기본적인 로직. 프로시저 등록, 윈도우 창 생성, 클래스 초기화 작업을 하고 메시지 루프를 돌린다.int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); //참조되지 않는 변수. 의미가 없다. UNREFERENCED_PARAMETER(lpCmdLine); //메모리 누수 체크 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //_C..
프로그래머스 - 뒤에 있는 큰 수 찾기 배열을 읽어가면서 본인보다 큰수중 가장 가까운 수를 똑같은 크기의 배열에 담아 리턴하는 문제 최대 1,000,000 개의 원소가 주어지기에 인덱스마다 맞는 수를 찾아 해맬경우 On^2이 되어 1조번 반복하게 되기때문에 가능한On 만큼으로 줄여야한다. Sol 1. 예비 벡터 arr를 하나더 생성하여 원본의 값과 인덱스를 저장. numbers를 순회할 때 조건에 맞는 수가 나올경우 해당 answer의 인덱스에 값을 추가하고 arr의 해당 인덱스는 erase한다. vector solution(vector numbers) { vector answer(numbers.size(), -1); vector> arr; //값, 인덱스 for (int i = 0; i >::iterator it = arr.begin() ..
프로그래머스 - 섬 연결하기: 크루스칼 ncostsreturn4[[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]]4 다음과 같은 그래프에서 MST(최소신장트리)를 만든뒤 그 비용을 반환하는 문제이다.Greedy로 분류된 문제이길래 costs를 비용기준 오름차순을 만들고 Set을 통해 모든 노드를 방문할 때까지 return값에 간선비용을 더했다. 후에 알고보니 이 방식이 크루스칼 알고리즘이었다;;내가 생각한 방법이 이미 있는 알고리즘인 것까지는 좋았다만 방문처리만으로는 모든 노드가 연결되어있는지 알 수 없었다. 따로 떨어져 있는 집합이어도 방문처리는 되기때문.그래서 찾은 방법이 유니온 파인드 자료구조? 알고리즘?이었다. https://velog.io/@jxlhe46/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%..
데이터 컨테이너 성능 BFS 문제를 풀다 효율성에서 막혀 vector, tuple, struct에 대해 정리하게 되었다. 프로그래머스 2레벨 게임 맵 최단거리int solution(vector > maps){ int answer = 0; vector> visited(maps.size(), vector(maps[0].size(), false)); tuple location = { 0,0,1 }; //vector location = { 0,0,1 }; pairtarget = { maps.size()-1,maps[0].size()-1 }; queue> que; que.push(location); visited[0][0] = true; int dx[4] = { 0,0,-1,1 }; int dy[4] = { -1,1,0,0 }; in..
프로그래머스 - 가장 먼 노드: BFS 처음에는 다익스트라로 푸는줄 알고 열심히 다익스트라를 공부했는데 알고보니 다익스트라가 필요없는 문제였다. 오히려 쓰는게 더 복잡해지는... BFS를 통해서 거리를 측정하고 가장 먼 거리의 노드를 새어 반환하면 되는 간단한! 문제처럼 보였지만 처음 구현하는 BFS 문제다보니 생각할게 좀 많았다. 코드 구현내용int solution(int n, vector> edge) //1번노드로부터 가장 먼 노드의 갯수 리턴{ int answer = 0; queue mque; vector> graph(n + 1); vector visited(n+1, false); vector distance(n+1, 0); for (vector it : edge)//인접리스트로 구현 { graph[it[0]].push_back(it[..
프로그래머스 - 캐시: LRU 운영체제의 캐시교체 알고리즘은 본적이 없어서 문제 이해를 못했다.GPT를 통해 알게된바로는 캐시메모리 교체 알고리즘으로 굉장히 단순한 편에 속했다.새로운 데이터가 들어오면 현재 캐시와 비교하여 캐시에 있다면 hit, 없다면 miss가 된다. hit일경우 hit된 캐시를 최신화하고 miss가 될경우 오래된 캐시를 지우고 새로운 데이터를 추가하는 방식으로 진행되었다. 코드 구현내용이다.int solution(int cacheSize, vector cities) { int answer = 0; if (cacheSize (toupper)); } // 캐시에 해당 도시가 있는 확인후 시간 증가 // 새로운 도시가 들어왔다면 오래된 도시 제거후 새로운 도시 추가 list data(cacheSize); for (s..