깊이 우선 탐색(dfs)그래프의 시작 노드에서 출발하여, 한쪽 분기를 정해, 최대 깊이까지 탐색하는 알고리즘.한번 방문한 노드는 다시 방문해서는 안된다. 구현 방법재귀 함수스택 이용시간복잡도 O(V+E) (노드 수 + 선분 수) 구현 구체화 방법1\. 그래프를 인접 리
기수 정렬(radix sort): 두 값을 비교하지 않고, 각 자리수에 따라 비교하여 정렬하는 알고리즘 시간복잡도 - O(kn) , k=데이터의 자릿수ex)16 80 18 77 03 24 88 23 1의 자리 숫자 기준으로 데이터 저장list0={80}list3={03
문제N개의 수로 이루어진 수열 A1, A2, …, AN이 있다. 이 수열에 대해서 버블 소트를 수행할 때, Swap이 총 몇 번 발생하는지 알아내는 프로그램을 작성하시오.버블 소트는 서로 인접해 있는 두 수를 바꿔가며 정렬하는 방법이다. 예를 들어 수열이 3 2 1 이
Divide and Conquer 방식을 이용하여, 데이터 분할 및 정렬하여 합치는 알고리즘.시간 복잡도 => O(nlogn)가장 작은 데이터 집합 부터 하나씩 정렬해가면서 => 전체 정렬 ex) 1\. 42 32 24 602\. 42 32 | 24 603\. 32 4
Adding a Home Screen Widget in Flutter App CodeLab 소개 여기서 소개하고자 하는 widget 은 flutter widget 에 대한 내용이 아니라 실제 device 홈화면에서의 widget 에 대한 내용이다. 위젯은 홈화면에
pivot 을 정해 해당 값보다 작은 데이터와 큰 데이터로 분류하여 recursive 하게 정렬하는 알고리즘=Divide and conquer시간복잡도가 일반적으로 O(nlogn)이지만 최악의 경우 O(n^2)start, end 2개의 포인터가 있어 pivot 기준 s
정렬된 데이터 범위에 정렬되지 않은 데이터를 적절한 위치에 삽입하여 정렬하는 방식.시간 복잡도는 O(n^2)문제인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출
데이터에서 최대나 최소 데이터를 데이터가 나열된 순으로 찾아가며 선택하는 방법.왼쪽부터 정렬되므로 inner for문 시 시작 지점을 잘 정하는 것이 그나마 효율성 측면에서 좋음.코팅테스트에서는 거의 사용하지 않는 알고리즘이다.문제배열을 정렬하는 것은 쉽다. 수가 주어
문제버블 소트 알고리즘을 다음과 같이 C++로 작성했다.위 소스에서 N은 배열의 크기이고, A는 정렬해야 하는 배열이다. 배열은 A1부터 사용한다.위와 같은 소스를 실행시켰을 때, 어떤 값이 출력되는지 구해보자.입력첫째 줄에 N이 주어진다. N은 500,000보다 작거
Bubble Sort:데이터의 인접 요소끼리 비교, swap방식을 통해 정렬하는 방식Selection Sort:대상에서 가장 크거나 작은 데이터를 찾아 선택하면서 정렬하는 방식Selection Sort:대상을 선택해 정렬된 영역에서 적절한 위치를 찾아가며 삽입하여 정렬
문제절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.배열에 정수 x (x ≠ 0)를 넣는다.배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.프로
문제N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바
문제크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
Stack >stack 은 선입선출 (Last in Frist Out) LIFO 형식으로 이루어진 자료구조. stack.append(data) 를 하면 가장 뒤쪽에 들어오고 stack.pop() 을 하면 가장 뒤쪽이 삭제된다. top pointer로 stack에서
문제 예시N개의 수 A1, A2, ..., AN과 L이 주어진다.$Di$= $A{i-L+1}$ ~ $A_i$ 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 $A_i$는 무시하고 D를 구해야 한다.입력첫째 줄에 N과 L
슬라이딩 윈도우는 기존의 투 포인터 문제와 다르게 일정 window를 유지한 채로 sliding 하며 푸는 문제를 의미.문제평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’,
문제N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다.입력첫째 줄에는 수의 개수 N(1 ≤ N ≤
문제주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장을 통해 철기군이 입을 갑옷을 만들게 하였다. 야철대장은 주몽의 명에 따르기 위하여 연구에 착수하던 중 아래와 같은 사실을 발견하게 되었다.갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷
문제어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다.예를 들
문제수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오.즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다.입