Cycle이 있는지 없는지 판단하는 문제다!간단하게 Cycle찾는 함수를 구현하면 풀수있다...! 소스코드123456789101112131415161718192021222324252627282930313233343536373839#include #include #include #include using namespace std;int n, m;int cycle[111];vector Graph; bool isCycle(int x) { if (cycle[x]) { if (cycle[x] == -1) return true; return false; } cycle[x] = -1; for (int i = 0; i
트리의 전위,중위 순회 결과를 주고 후위 순회 결과를 구하는 문제다재귀를 잘 이용하면 풀 수 있다 방법은1. 전위순회에서 첫번째 노드는 루트라는것을 기억한다!2. 후위순회에서 루트기준 앞쪽 노드들은 왼쪽, 뒷쪽은 오른쪽 서브트리다3. 후위 순회를 출력하므로 왼쪽 오른쪽 순서로 함수를 호출하고 루트를 출력한다 후위순회에서 루트 위치를 찾기 위해 map을 사용했다! 소스코드12345678910111213141516171819202122232425262728293031323334#include #include #include #include using namespace std;int t, n, pre[1010], in[1010];map mp; void go(int s, int e,int x, int y) { ..
전위순회를 주고 후위순회한 결과를 출력하는 문제다트리를 직접 만들어도 되지만 그러면 귀찮다 푸는방법은 전위,후위순회를 할 때 방문하는 노드를 생각해보면된다 전위순회한 결과에서 첫번째 노드는 항상 루트다그리고 두번째 노드부터 루트보다 큰노드가 나오기 전까지는 왼쪽서브트리큰노드부터 마지막까진 오른쪽 서브트리다 그럼 범위를 쪼개가며 재귀로 타고 들어가서왼쪽 오른쪽 순서로 들어가며 루트를 출력해주면 원하는 답을 얻을 수 있다!그림을 그려서 생각해보면 쉽다! 소스코드12345678910111213141516171819202122#include #include using namespace std;int arr[10010], n; void go(int l, int r) { if (l > r) return; int r..
문제 설명이 애매하다..! 풀이는 간단하다 1. 입력받은 인용수를 배열에 넣고 정렬시킨다.2. 0~10000까지를 다 돌아보며 k를 정해준다3. k의 lower_bound부터 upper_bound까지가 확인 해 줄 범위다왜냐하면 k의 lower_bound 부터 upper_bound 이전까지는 k번 이하를 만족한다!4. 범위를 돌며 k이상 인용한게 k와 같은지 확인한다 소스코드12345678910111213141516171819202122#include #include using namespace std;int n;int arr[1010]; int main() { scanf(" %d", &n); for (int i = 0; i