전체 글 704

마음이 정화되는 소스코드

#include void makeAndEatRamen() { printf("라면을 만들어 먹는 작업을 시작합니다.\n"); auto boilWater = [&]() { printf("냄비에 물을 끓이는 작업을 시작합니다.\n"); auto preparePot = [&]() { printf("냄비를 준비합니다.\n"); }; preparePot(); auto turnOnFire = [&]() { printf("가스레인지에 불을 붙힙니다.\n"); }; turnOnFire(); auto waitUntilBoil = [&]() { printf("냄비의 물이 끓을 때 까지 기다립니다.\n"); }; waitUntilBoil(); printf("냄비에 물을 끓이는 작업을 완료하였습니다.\n"); }; boilWa..

컴퓨터 공학 2019.04.06

자바스크립트에서 콜백지옥으로 인한 들여쓰기 문제 해결하는 방법

자바스크립트는 대부분의 함수가 비동기적으로 처리되기 때문에 콜백함수를 많이 사용합니다. 콜백함수를 사용할 때는 보통 익명함수를 사용하며, 파라미터 부분에 ()=>{} 형식으로 함수 구현부분을 작성합니다. 이로 인해, 콜백함수 내에서 콜백함수를 호출하는 부분이 많아질수록 더 많은 들여쓰기를 갖게 되고, 결과적으로 가독성을 크게 떨어뜨리게 됩니다. 그래서, 저는 이 부분을 해결하기 위해 익명함수 대신 별도의 함수를 정의하고 콜백함수에서 정의한 함수를 호출하도록 함으로써 들여쓰기 문제를 해결하고자 하였습니다. 12345678910111213141516171819202122function removeAllFilesFromMapId(map_id){ let directory:string = path.join(UPL..

컴퓨터 공학 2018.11.12

[C/C++] 윈도우즈 운영체제에서 맥 주소 가져오기

아래의 코드는 윈도우즈 환경에서 "Windows.h" 헤더파일에 포함된 API를 사용하여 장치의 맥 주소를 출력하는 과정을 나타냅니다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #include #include #include #include #pragma comment(lib, "iphlpapi.lib") IP_ADAPTER_INFO* GetNetworkAdaptersInfo() { DWORD dwBufLen = 0; DWORD dwStatus = GetAdaptersInfo(NULL, &dwBu..

[c/c++] Boost 주요 기능 정리

boost의 주요 기능들과 그 기능들을 활용하여 구현한 채팅 프로그램에 대해 설명드리겠습니다. 주요 기능들은 다음과 같습니다. Boost::thread Boost::bind boost::function boost::chrono 스마트 포인터 boost::signal boost::mutex boost::asio boost::timer 먼저, 스레드에 대해 설명드리겠습니다. 스레드는 프로세스 내에서 실행되는 흐름의 단위라고 하는데요, 멀티스레드를 사용함으로써 프로세스의 처리성능을 높일 수 있는 장점이 있습니다. boost에서 제공하는 스레드를 사용하기 위해 boost/thread.hpp를 선언해야 하며, 다른 클래스와 다르게 스레드는 복사가 불가능하다는 특징이 있습니다. 스레드를 사용하는 예제가 다음의 코드..

인맥의 중요성

얼마 후 상심에 빠져있는 토맹이에게 토달이가 찾아왔다. "넌 내가 잔치에 초대했을 땐 오지 않더니 왜 이제야 온 거니? 잔치는 이미 다 끝나버렸어. 당근과 과일도 모두 떨어져서 너에게 줄 것이 아무것도 없어." 토맹이가 말했다. "토맹아, 난 당근과 과일 때문에 찾아온게 아냐. 난 너를 쭉 지켜 보았어. 넌 친구를 만들기 위해 안간힘을 썼지만 진정한 친구를 만드는 방법은 아직 깨닫지 못한 것 같구나." 토달이의 말에 토맹이는 힘 없는 목소리로 말을 이어갔다. "하지만 난 최선을 다했어. 고향 친구들을 만나기도 했고 왕토끼를 찾아기기도 했어. 그리고 가지고 있는 모든 것을 털어서 날마다 잔치까지 열어봤지. 하지만 매번 실패로 돌아갔어. 아무래도 난 운이 없나봐." "토맹아, 네 모습을 곰곰히 생각해 봐. ..

알고스팟 - 수강철회 (WITHDRAWAL)

문제 : https://algospot.com/judge/problem/read/WITHDRAWAL 이 문제에서 n개의 수강과목이 주어지고, 이 중에서 k개의 수강과목을 선택하여 누적등수를 높이고자 합니다. 이 문제를 해결하는 가장 단순 무식한 방법은 n개의 과목 중에서 모든 경우의 k개의 과목을 선택하여 가장 낮은 값을 가지는 누적 등수 값을 찾는 것입니다. 즉, n개 중에서 k개를 선택하는 경우의 수만큼 검사를 해야 합니다. 그 공식은 위와 같이 나타낼 수 있는데, 문제에서 n의 값이 1000까지 가능하다고 하기 때문에, 예를 들어, n=1000이고, k=10일 경우, 모든 가능한 경우의 수는 다음과 같이 상당한 값을 가지게 됩니다. 따라서, 단순 무식한 방법으로는 절대 결과를 얻을 수 없다는 것을 ..

2-SAT (2-Satisfiability)

2-SAT은 충족가능성 문제로, 위의 식과 같이 OR 연산으로 두 변수가 묶인 절들이 각각 AND 연산으로 연결되어 있는 형태에 대해 f가 참인 경우를 만들기 위해 각각의 변수를 참과 거짓 중 무엇으로 설정해야 하는지 계산해야 합니다. 위와 같이 AND 연산으로만 표현된 식의 형태를 CNF (Closure Normal Form)이라고 합니다. 두 불린 변수 p와 q가 있을 때, p→q는 “p가 참이면 q도 참이다”라는 명제를 의미합니다. 다음의 표는 두 불린 변수의 각 경우에는 p→q의 진리값을 나타냅니다. 만약 p가 참일 때 q가 거짓이라면 이 명제는 거짓인 명제가 됩니다. 그리고, p가 거짓이라면 q와 상관없이 이 명제는 항상 참이되는데요, 그 이유는 이 명제는 항상 p가 참일 경우가 전제가 되어야 ..

알고스팟 - 변화하는 중간값 (RUNNINGMEDIAN) 설명

문제 : https://algospot.com/judge/problem/read/RUNNINGMEDIAN문제에서 설명한 바와 같이 수열에 새로운 값을 삽입할 때마다 해당 수열의 중간값을 출력하는 효율적인 방법은 두 개의 우선순위 큐를 이용하는 것입니다. 두 개의 우선순위 큐 중에서 하나는 오름차순 우선순위 큐, 다른 하나는 내림차순 우선순위 큐로 구성합니다. 새로운 데이터를 삽입할 때, Q1의 top보다 작으면 Q1에 삽입하고, Q2의 top보다 크면 Q2에 삽입하면서, 모든 경우에 대해 만약 Q1과 Q2의 데이터 개수를 동일하거나 전체 데이터 개수가 홀수 개이면서 Q1의 데이터 개수가 Q2보다 한 개 더 많을 때, Q1의 top이 중간값이라고 할 수 있습니다.예시를 위해 입력 데이터를 다음과 같이 구성..