전체 글

· C++
#include #include using namespace std; int main(int argc, char** argv) { int N, K; char value; vector arr; cin >> N >> K; for (int i = 0; i > value; arr.push_back(value); } int answer = 0; for (int i = 0; i = N ? N - 1 : i + K; for (int j = left; j
· C++
이 문제는 현대스러운 문제였다. 그래서 푸는데 재밌었다. 처음에는 어떻게 풀어야할지 고민을 좀 했던 것 같다. 하지만 이렇게 맵을 가지고 푸는 문제는 dfs, bfs중에 하나인 경우가 많기 때문에 이 두 알고리즘을 어떻게 적용할지 고민했다. 그래서 내가 푼 방식을 dfs를 여러 번 적용하는 방식이다. 일단 모든 외부의 0을 훑어야하고 1과 접촉한 0들이 1에 왔다갔음을 기록해야지 2개 이상이 접촉했음을 알 수 있다. 그래서 나는 이미 훑고 간 0은 -1로 바꾸었고 0이 접촉한 1을 +1을 해서 몇개 옆에 붙었는지 카운트하였다. 그래서 3이상의 값을 가진 얼음들은 2개이상이 접촉했기 때문에 1시간 뒤에 얼음이 녹는 것을 확인할 수 있었다. #include #include using namespace std..
· C++
이 문제는 딱봐도 DFS느낌이 바로 왔다. 맵에서 1을 만나는 경우 DFS를 이용해서 개수를 찾으면 될 것 같은 느낌이 왔다. 이 아이디어만 있으면 구현부분에서 잘하면 쉽게 풀 수 있는 문제이다. // 딱봐도 DFS #include #include #include #include using namespace std; vector arr; vector collect; vector dx = {1,0,-1,0}; vector dy = {0,1,0,-1}; int howMany = 0; int N; vector split(string &str){ vector line; for (char c : str){ line.push_back(stoi(string(1, c))); } return line; } void df..
· 42seoul
GitHub - 42webserv/42webserv Contribute to 42webserv/42webserv development by creating an account on GitHub. github.com 개요 먼저 우리가 만든 wev server의 요구 사항을 정리해보자. 구현한 디테일한 기능과 에러처리도 있지만 큰 기능을 위주로 설명을 하려고 한다. - Kqueue 를 이용한 비동기, 논블로킹 소켓 프로그래밍 - HTTP1.1 프로토콜을 이용한 통신 - CGI를 이용한 동적 웹 사이트 제공 - config file을 이용한 웹서버 설정 간단하게 다시 정리해서 말하자면 nginx를 직접 만들어보는 프로젝트이다. 구조 설계 및 동작 순서 구조를 다이어그램으로 간단히 표현을 한다면 아래 그림과 같..
· C++
#include #include using namespace std; int main(int argc, char** argv) { int N; int workTimeA, workTimeB, moveTimeAtoB, moveTimeBtoA; vector work, move; cin >> N; for (int i = 0; i > workTimeA >> workTimeB >> moveTimeAtoB >> moveTimeBtoA; work.push_back(make_pair(workTimeA, workTimeB)); move.push_back(make_pair(moveTimeAtoB, moveTimeBtoA)); } int A = 0; // A의 최소 시간 기록 int B = 0; ..
· C++
#include #include #define ALWAYS_WIN 1 #define HAVE_EVER_LOSE -1 #define NO_FRIEND 0 using namespace std; int main(int argc, char** argv) { int N, M, W; cin >> N >> M; vector iambest(N, 0); vector weight; for (int i = 0; i > W; weight.push_back(W); } int left, right; for (int i = 0; i > left >> right; int prevLeft = iambest[left - 1]; int prevRight = iambest[right..
· C++
이거는 아이디어가 중요한 것 같다. 가장 많은 강의를 배정하기 위해서 가장 먼저 끝나는 수업들을 정렬한다. 이 부분이 우선순위가 강의 종료시간이 된 것이다. 그리고 앞에서부터 하나씩 강의를 배정하고 끝나는 시간과 시작 시간을 확인해서 카운트를 해주면 최대 강의 배정 개수를 구할 수 있다. #include #include #include using namespace std; int main(int argc, char** argv) { int N; cin >> N; int S, F; vector arr; for (int i = 0; i > S >> F; arr.push_back(make_pair(F, S)); } sort(arr.begin(), arr.end()); pair cu..
· C++
문제를 풀기 전에 분할 정복에 대해서 알아보자. 분할 정복이란, 문제를 풀 때, 비슷한 부분의 작은 부분으로 쪼개서 계산하고 그 결과들을 통해서 답을 도출하는 방법이다. 총 3가지 단계로 나눠서 문제를 풀게 되는데, 1. Divide : 기존 문제를 작은 부분 문제들로 나눈다. 2. Conquer : 각 부분 문제들을 해결 3. Combine : 부분 문제들의 솔루션을 통해서 기존 문제를 해결 이런 식으로 문제를 푼다. 분할정복의 대표적인 예로는 병합 정렬이 있다. 수퍼 바이러스 문제는 계산하면서 수가 너무 커지기 때문에 미리 계산을 해서 그나마 작은 수들로 계산을 해나가야 하기 때문에 분할 정복을 사용해야한다. 여기서 1000000007의 정체를 궁금해 하는 사람이 있을 것이다. 1000000007는 ..