Programming/Algorithm
-
[Algorithm] 조합Programming/Algorithm 2020. 4. 24. 12:57
- 순서가 상관없음 { 1, 2, 3 }, { 1, 3, 2 }, {2, 1, 3} 다 같은 취급 - permutation을 쓰지 않고 재귀로 직접 구현방법 5개중에 3개를 뽑는 문제의 경우 { 1, 2, 3, 4, 5 } 가 있을 때, 3개 뽑기문제 { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 5 },.....{ 3, 4, 5 } 이런식으로 진행 특징은? 시작점을 정한 이후에는 그 전의 요소를 고려하지 않는다. 즉) 이미 시작점이 1을 지나고 { 2, 3, 4 }, 이미 이런식으로 첫 번째 인덱스가 2가 되면 이 이후에 1은 절대로 뽑히지 않는다! { 1, 2, 3 } = { 2, 3, 1 } -> 이런식으로 이 둘은 같은 조합이고, { 2, 3, 1 }은 이미 시작점이 1일 때, { ..
-
[Algorithm] C++ 특정 수 만들기(DFS)Programming/Algorithm 2020. 1. 7. 13:26
입력예제 1 4 12 2 4 6 8 출력예제 1 4 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int a[11], n, m, cnt = 0; void DFS(int L, int val) { if (L == n + 1) { if (val == m) cnt++; } else { DFS(L + 1, val + a[L]); DFS(L + 1, val - a[L]); DFS(L + 1, val); } } int main() { int i; scanf("%d %d", &n, &m); for (i = 1; i
-
[Algorithm] C++ 합이 같은 부분집합(DFS)Programming/Algorithm 2020. 1. 6. 15:25
입력예제 1 6 1 3 5 6 7 10 출력예제 1 YES #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int n, a[11], total = 10; bool flag = false; void DFS(int L, int sum) { if (sum > (total / 2)) return; if (flag == true) return; if (L == n + 1) { if (sum == (total - sum)) { flag = true; } } else { DFS(L + 1, sum + a[L]); // 누적되는과정 DFS(L + 1, sum); // 사용하지 않을것이면 그냥 가는 것 } } int main(..
-
[Algorithm] C++ 올바른 괄호(Stack)Programming/Algorithm 2020. 1. 2. 23:56
입력예제 1 (()(()))(() 출력예제 1 NO 입력예제 2 ()()(()()) 출력예제 2 YES #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int main() { stack s; char a[50]; int i, flag = 1; scanf("%s", &a); for (i = 0; a[i] != '\0'; i++) { if (a[i] == '(') s.push(a[i]); else { if (s.empty()) { printf("NO\n"); flag = 0; break; } else s.pop(); } } if (s.empty() && flag == 1) printf("YES\n"..
-
[Algorithm] C++ Ugly Numbers (투포인트 알고리즘)Programming/Algorithm 2020. 1. 2. 15:13
입력예제 1 10 출력예제 1 1500 입력예제 2 1500 출력예제 2 859963392 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int a[1501]; int main() { int n, i, p2, p3, p5, min = 2147000000; scanf("%d", &n); a[1] = 1; p2 = p3 = p5 = 1; for (i = 2; i