플로이드 와샬 알고리즘을 이용해서 풀었다. 자세한 방법은 아래의 블로그에서 공부해보면 좋을 것 같다. [알고리즘] 플로이드 와샬 (Floyd Warshall) 목차 플로이드 와샬이란? 다익스트라 알고리즘은 하나의 노드에서 출발했을 때 다른 모든 노드로의 최단 경로를 구하는 알고리즘이다. 하지만 플로이드 와샬 알고리즘은 모든 노드에서 모든 노 propercoding.tistory.com 플로이드 와샬 알고리즘은 A 노드에서 B 노드로 가는 가장 최소한의 길이를 구하는 방법에 사용되는데 거쳐가는 노드를 이용해서 최소한의 길이를 구하는 방법이다. 이 플로이드 와샬 알고리즘의 개념은 어떤 식으로 문제에 대입해서 결과를 도출해내는 것일까? 만약에 A와 B의 관계를 알고 싶다. 하지만 A,C의 관계 정보 C, B의..
c++
#include #include #include #include using namespace std; int solution(vector clothes) { int answer = 1; map collector; for (vector cloth : clothes) { collector[cloth[1]]++; } for (auto &value : collector){ answer *= value.second + 1; } return answer - 1; } 사실 쉬운 문제인데, 어떻게 풀어야할지 헷갈렸었다. 그런 문제는 보면 조합으로 모든 경우의 수를 찾아봐야하나? 이런 생각도 들고 그랬지만 특정 케이스를 찾는 것이 아닌, 경우의 수만 구하면 되기 때문에 의상 수에 +1을 해서 다 곱하고 -1을 하면 아무..
#include #include #include #include using namespace std; int solution(int n, vector edge) { int answer = 0; vector graph(20001); vector visited(20001, 0); queue queue; vector counts(20001, 0); for (vector line : edge){ graph[line[0]].push_back(line[1]); graph[line[1]].push_back(line[0]); } queue.push(1); visited[1] = 1; int prev = 1; int next = 0; while (queue.size() != 0){ int num = qu..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 출퇴근길 문제는 DFS로 풀어야하는 걸 알겠지만 DFS의 탈출 조건에 대해서 이해하고 생각하는데 어려움을 느꼈다. // DFS 레츠고 #include #include using namespace std; int visitedStoT[100001]; int visitedTtoS[100001]; vector dir[100001]; int N, M; int S, T; bool go(int cur, int end, int visited[]){ vector &tmp = dir[cur]; bool pass = false; for (int i = 0; i < tmp.size(); i++){ if (tmp[i] == end){ // 목적지에 도착하면..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 문제는 위 링크에서 확인바란다. 일단 이 문제는 패턴을 파악해서 수식화하는 능력을 요구한다. 첫번째 네모의 한 변에 있는 점의 개수는 2개, 다음은 3개, 다음은 5, 9, 17 ... 이렇게 늘어나는데 패턴은 #include #include using namespace std; int main(int argc, char** argv) { int N; cin >> N; long long lineCount = 2; for (int i = 0; i
이 문제는 딱봐도 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..
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를 직접 만들어보는 프로젝트이다. 구조 설계 및 동작 순서 구조를 다이어그램으로 간단히 표현을 한다면 아래 그림과 같..
#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; ..