Algorithm 4

(DFS/BFS)여행경로

처음 풀이 기저사례 : 단순히 티켓의 개수에 집중해서 규칙으로 끼워맞추려고 함 1.ICN부터 출발해서 (도착,다음 출발) -(도착,다음 출발)-마지막 도착 이런 식으로 묶으면 결국 티켓의 사이즈와 동일한데 생각하지 못함 2.재귀함수를 종료하기 위해서는 재귀함수 파라미터에 인덱스를 증가시키면서 탈출조건과 맞도록해야하는데 1번을 생각하지 못해서 마지막에 출력하는 경로의 사이즈와 티켓의 개수로 처리 로직 for(int i=0;i 기저사례를 만족했을 때 다른 경우를 찾지 않도록 혹은 기저사례를 만족하지 않는 경우가 있을 때만 방문처리를 취소하고 pop_back()하는 조건을 처리 했을 때 모든 조건을 만족하게 된다 다른 사람들의 코드를 봤을 때 이러한 경우를 처리할 때는 bool형때의 flag를 선언하여 조건만..

(DFS/BFS)네트워크

풀이 인접행렬 vs 인접리스트 인접행렬은 노드간 링크가 조밀할 경우 사용하는게 효율적 -> 이문제에서는 인접리스트를 이용해서 각각의 노드별로 연결된 것들을 탐색하는 방법 사용 dfs dfs에서 연결된 컴포넌트와 연결되지 않은 컴포넌트의 개수를 모두 구해야함 코드 #include #include #include using namespace std; vector adj[200]; int visited[200]; int answer; //하나의 노드와 연결된 노드들 탐색 int conn; //연결된 컴포넌트 내부의 개수 void dfs(int i,int n){ conn++; visited[i]=1; for(auto ele : adj[i]){ if(adj[ele].size()>0 && !visited[ele])..

(완전탐색)최소직사각형

제한사항 sizes의 길이는 1 이상 10,000 이하입니다. sizes의 원소는 [w, h] 형식입니다. w는 명함의 가로 길이를 나타냅니다. h는 명함의 세로 길이를 나타냅니다. w와 h는 1 이상 1,000 이하인 자연수입니다. 풀이 만들수 있는 모든 경우의 명함 크기를 담을 수 있어야 하기 때문에 최댓값을 찾는 과정 필요 명함1개당 가로, 세로 위치를 바꿀수 있는 2개의 경우가 나옴 테스트케이스 1번의 경우 4개의 명함에서 총 16가지의 명함크기가 나올 수 있다 가장큰 가로와 가장큰 세로를 곱했을 때 최소를 구해야하기 때문에 가로나 세로중 하나를 정해서 작은 값을 모으고 한쪽은 큰값을 모아 그중에 최대값을 곱한다 #include #include #include #include using names..