실패 코드 방법 티켓의 [a, b] 중 b를 기준으로 알파벳 순서가 앞서도록 정렬 후, 그 중에서 맨 앞의 ICN을 선택한 후 dfs 함수로 재귀를 통해 경로를 구하도록 하였다. 🤨 그 결과 다음과 같이 테스트 1, 2를 통과하지 못했다... 코드 #include #include #include using namespace std; vector answer; vector t; vector ch(10000, 0); bool cmp(vector a, vector b){ return a[1]
문제 파악 음이 아닌 n개의 정수들을 순서를 바꾸지 않고 더하거나 빼서 타겟 넘버를 만든다. 유형 파악 우선 문제에서 주어진 입출력 예를 보고 직접 하나하나 구해보자. numbers를 통해 주어진 수들이 순서대로 더해지거나 빼지는 것이므로 아래 그림과 같이 모든 경우를 직접 구해본다. 첫 번째 입출력 예 numbers에 주어진 수 5가지를 순서대로 더하거나 빼준다. 마지막에 target 값인 3이 나오는 경우가 총 5가지인 것을 확인할 수 있다. 두번째 입출력 예 numbers에 주어진 수 4가지를 순서대로 더하거나 빼준다. 마지막에 target 값인 4가 나오는 경우가 2가지인 것을 확인할 수 있다. 🤨 두 가지의 입출력 예에 대해 직접 그려본 결과 연산한 결과에 대해 계속해서 + 또는 - 연산을 반복..
알고리즘 트리 재귀 전위/중위/후위 순회 이진트리를 순회하는 방법에는 전위, 중위, 후위 3가지 방법이 있다. 이진트리에서 보면 전체 트리나 서브 트리나 그 구조는 완전히 동일하다. -> 따라서 전체 트리 순회에 사용된 알고리즘은 똑같이 서브 트리에 적용할 수 있는 것이다. 다만 문제의 크기가 작아진다. 문제의 구조는 같고 크기만 작아지는 경우라면 순환을 적용할 수 있으므로 전체 순회에 사용된 알고리즘을 다시 서브트리에 적용하는 것이 가능해진다. 전위 순회 루트노드 방문 왼쪽 서브트리의 모든 노드 방문 오른쪽 서브트리의 모든 노드 방문 중위 순회 왼쪽 서브트리의 모든 노드 방문 루트노드 방문 오른쪽 서브트리의 모든 노드 방문 후위 순회 왼쪽 서브트리의 모든 노드 방문 오른쪽 서브트리의 모든 노드 방문 루..
알고리즘 재귀 문제 핵심 원판의 이동 과정 n개의 원판이 start에 쌓여있는 경우, 먼저 위에 쌓여 있는 n-1개의 원판을 mid로 옮긴 다음, 제일 밑에 있는 원판을 C로 옮긴다. 이어서 mid에 있던 n-1개의 원판을 end로 옮긴다. 하노이탑의 최소이동횟수 2^n(하노이 탑의 원판 개수)-1이다. 전체 코드 #include #include using namespace std; void hanoi_tower(int n, int start, int mid, int end){ if(n==1){ printf("%d %d\n", start, end); } else{ hanoi_tower(n-1, start, end, mid); printf("%d %d\n", start, end); hanoi_tower(n..