STUDY/알고리즘(24)
-
Maximum Depth of BT(Binary Tree)
Given a binary tree, find height of it. Height of empty tree is -1, height of tree with one node is 0 and height of below tree is 2. ( root node 는 0으로 카운트해서 -1을 해주는 거군요. 그래서 아래의 tree 의 depth 는 2임 ! ) maxDepth() 의 pseudo code detail 을 한번 살펴보자. 거꾸로다 거꾸로! 아래의 4,5번부터 count 한다. 4,5는 자식이 없으니 0, 2는 자식(4,5) 이 있으니 1, 1은 2,3이라는 자식이 있으니 2가된다. maxDepth() 1. If tree is empty then return -1. 2. Else ! ( a ) G..
2022.08.30 -
에라토스테네스의 체 ( Sieve of Eratosthenes ) - C++
오... 이건 또 무엇인가. 백준 17425번을 풀다가 접한 이론이다. 소수를 찾는 방법중 하나이다. 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 불린다. # 방법 # 임의의 자연수 N 에 대해 그 이하의 소수를 찾는 가장 간단하고 빠른 방법이다. 예를 들어 1 ~ 100 까지 숫자 중 소수를 찾는다고 하자. ( The sieve of Eratosthenes is one of the most efficient ways to find all primes smaller than N when N is smaller than 10 million or so. ) 1. 우선 1 ~ 100 까지의 수가 있다. ( Let us take an example when N = 100. So,..
2022.08.17 -
백준 17427 - 약수의 합(C++)
문제 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다. 자연수 N이 주어졌을 때, g(N)을 구해보자. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 g(N)를 출력한다. 예제 입력 1 복사 1 예제 출력 1 복사 1 예제 입력 2 복사 2 예제 출력 2 복사 4 예제 입력 3 복사 10 예제 출력 3 복사 87 # 풀이 # 1 2 3 4 5 6 7 8 9..
2022.08.17 -
백준 설탕배달
허얼... ㅠㅠ 다풀었는데..... 다풀었는데 .......!!! 마지막 입출력값이 안나왔어... 좀더 단순하게 생각해야겠다. ㅠㅠ https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 설탕 봉지 갯수를 최소로 줄여야하니까... 5KG짜리를 1봉지씩 줄여가며 나머지값이 3으로 떨어지는 갯수를 찾아야하는것이다. 문제에 답이 있다. ㅠ_ㅠ 그래도 정답률 30퍼 대라는거에 위안을 ㅋㅋㅋㅋㅋㅋㅋㅋ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ..
2022.08.16 -
Two Pointer (C++)
투 포인터는 매우 쉽고 효율적인 테크닉으로, 일반적으로 소팅된 배열에서 검색하는 방법이다. 주어진 배열 A(sorting in ascending order), 그리고 N integers 가 있다.(target값). 해당 배열에서 임시로 설정한 pair( A[i], A[j] ) 의 합이 target 과 같은 것이 있는지 찾는 것이다. 예시를 보며 이해해보자. A[] = {10, 20, 35, 50, 75, 80} X = =70 i = 0 j = 5 A[i] + A[j] = 10 + 80 = 90 Since A[i] + A[j] > X, j-- i = 0 j = 4 A[i] + A[j] = 10 + 75 = 85 Since A[i] + A[j] > X, j-- i = 0 j = 3 A[i] + A[j] = ..
2022.08.11 -
유클리드 호제법 (Euclidean Algorithm) in C
유클리드 호제법은, 두 정수의 최대 공약수(Greatest Common Divisor)를 구하는 알고리즘 중 하나이다. a, b의 최대 공약수는, a/b를 나눈 나머지인 r과 b의 최대공약수와 같다는 성질에 따라, 재귀와 반복문을 통해 구현할 수 있다. * 최대 공약수 ( Greatest Common Divisor, GCD ) 두 개 이상의 수가 공통으로 갖고 있는 약수 중 가장 큰 ! 수. ex) 8의 약수 : 1, 2, 4, 8 12의 약수 : 1, 2, 3, 4, 6, 12 8과 12의 최대 공약수 : 4 * 최소 공배수 ( Least Common Multiple , LCM ) ex) 3의 배수 : 3, 6, 9, 12, 15 ... 5의 배수 : 5, 10, 15, 20 ... 3과 5의 최소 공..
2022.08.03 -
점근적 표기법 ( asymptotic notation)
* 점근적 표기법 이란? 상수 계수와 중요하지 않은 항목을 제거한것 ! 점근적 표기법에는 3가지가 있다. - big-ThetaΘ 표기법 > 보통 상수 인자와 낮은 차원의 항목은 생략하고 사용한다. 예를들어 시간이 6n^2 + 100n + 300이라고 가정하면, 계수인 6과 저차원 항목인 100n+300을 생략한 n^2만 실행시간으로 치는것이다. big-세타 표기법을 사용하는건, 실행시간에 대해 점근적으로 근접한 한계값이 있다고 표현하는것이다. 점근적으로 ! 라는 말을 쓰는 이유는, 큰 값의 n에 대해서만 적용되기 때문이다. 근접한 한계값이라는 말은, 위, 아래로 상수값 내에서 실행시간을 좁힐 수 있다는 뜻이다. https://ko.khanacademy.org/computing/computer-scienc..
2022.08.02 -
Adjacency list in C
https://www.geeksforgeeks.org/graph-and-its-representations/ Graph and its representations - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. www.geeksforgeeks.org
2022.07.30 -
About Graph & BFS,DFS
그래프가 제일 어렵구나........ ㅜㅜ 먼저 그래프란 무엇인가..? A graph is a data structure that consists of the following two components: 1. A finite set of verices also called as nodes. 2. A finite set of ordered pair of the form (u, v) called as edge. The pair is ordered because (u, v) is not the same as (v, u) in case of a directed graph(di-graph, -> oneway graph) . The pair of the form (u, v) indicates that there ..
2022.07.18 -
qsort - Quick sort in c
stdlib.h 에서 지원하는 qsort 가 있다고한다.. 난 여태... 뭘 배운거죠 ...? 허허... #include #include // qsort 함수가 선언된 헤더 파일 int compare(const void *a, const void *b) // 오름차순 비교 함수 구현 { int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴 if (num1 num2) // a가 b보다 클 때는 return 1; // 1 반환 return 0..
2022.07.05