Algorithm/Algorithm 9

[재귀] N과 M(1)

예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 예제 입력 3 4 4 예제 출력 3 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 ..

Algorithm/Algorithm 2019.10.28

순열 활용하기

예제 입력 1 4 1 2 3 4 예제 출력 1 1 2 4 3 예제 입력 2 5 5 4 3 2 1 예제 출력 2 -1 https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net #include #define MAX_SIZE (10001) int N; int arr[MAX_SIZE]; void swap(int* ar, int a, int b) { int temp = ar[a]; ar[a] = ar[b]; ar[b] = temp; } // 1. A[i-1] ..

Algorithm/Algorithm 2019.09.13

파스칼의 삼각형

[ 파스칼의 삼각형 ] 파스칼의 삼각형은, 아래와 같이 조합(Combination)과 연관이 있다. 위에서 주어진대로, 로 가정하면 구현하기 매우 간편해진다. 파스칼의 삼각형을 코드로 구현하면 아래와 같다. m과 n을 입력받아서 을 출력한다. #include #define MAX_ARRAY_SIZE (31) int main(void) { int n, m; int D[MAX_ARRAY_SIZE][MAX_ARRAY_SIZE] = { 1, }; scanf("%d %d", &n, &m); for (int i = 1; i

Algorithm/Algorithm 2018.10.01

[그래프] 인접 리스트

설명설명 [ BFS, DFS 구현(인접리스트 활용) ] DFS와 BFS 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB4284613356802329.497%문제그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.입력첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 한 간선이 여러 번 주어질 수도 있는데, 간선이 하나만 있는 ..

Algorithm/Algorithm 2018.08.21

Quick Sort / Merge Sort

[ Quick Sort ] - 이미 정렬되어있는 경우 O(N^2) 알고리즘이 됨에 유의#include #include using namespace std; void swap(int input[], int a, int b) { int temp = input[a]; input[a] = input[b]; input[b] = temp; } int partition(int input[], int low, int high) { int index = low; for (int i = low; i < high; i++) // 여기서 high를 일단 pivot으로 보고있으므로 high는 빠져야한다. { if (input[i] = high) return; int pivot = partition(input, low, high..

Algorithm/Algorithm 2018.08.21

소수 구하기, 소인수분해

[ 소수 구하기 ] 1 ~ N까지 모든 소수를 구하기 - 에라토스테네스의 체 1. 1은 소수가 아니다. 2. 2부터 시작하여 아직 지워지지 않은 수는 소수이다. 3. 소수를 찾았으면, 그 수의 배수를 모두 지운다. 4. 루트 N까지만 검사를 해보면 된다. Step 0. 초기상태. 1은 소수가 아니므로 지운다. Step 1. 2부터 시작한다. 2는 지워지지 않았으므로 2는 소수이며 2의 배수를 모두 지운다. Step 2. 그다음 수 3이 지워지지 않았으므로, 3도 소수이고, 3의 배수를 모두 지운다. Step 3. 4는 이미 지워져있으므로, 소수가 아니다. Step 4. 이런식으로 루트N까지 검사했을 때, 남아있는 수들이 모두 소수이다. [ 소수 구하기 문제 ] 문제 링크 : https://www.acmi..

Algorithm/Algorithm 2018.08.16

최대공약수 최소공배수, 진법

[ 최대공약수 ] - 유클리드 호제법을 이용해서 구할 수 있다.- 두 수 A,B의 최대공약수를 구하려면, A를 B로 나눈 나머지가 r이라고 할 때, GCD(A, B) = GCD(B, r) r = 0이 될 때의 B가 최대 공약수이다. int GCD(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; }[ 최소공배수 ] - 다음 관계를 이용하여 푼다. LCM * GCD = A * B LCM = A * B / GCD [ N진법 수를 쉽게 10진법 수로 바꾸기 ] ex) N = 3진법 수 102를 10진법 수로 바꾸기 왼쪽에서부터 순차적으로 전개해나간다. 102 먼저 가장 왼쪽에 있는 수 1 -> 1기존 수에 3을 곱하고 0을 더한..

Algorithm/Algorithm 2018.08.15