본문 바로가기

Algorithm

병합정렬 #include #define SIZE 10 void merge(int arr[], int l, int m, int r) { int i=l, j=m+1, k=l; int tmp[SIZE]; while (i 더보기
JUMPGAME 문제 :https://algospot.com/judge/problem/read/JUMPGAME 배열에서 해당 위치의 값 만큼 오른쪽이나 아래쪽으로 이동하여 배열의 마지막 부분으로 이동하는 것이 가능한지 아닌지를 구하는 프로그램인데, 기존의 재귀 호출을 이용하여 (0, 0)에서 (N-1, N-1)의 위치로 탐색 하게 되면 목적지로 가지 않는 이동 경로도 탐색 하기 때문에 많은 시간을 필요로 한다.그렇기 때문에 (N-1, N-1)에서 (0, 0)으로 반대로 탐색하게 되면 목적지로 향하는 알맞은 값을 탐색해 나가기 때문에 시간을 단축하고 원하는 결과를 얻을 수 있다. 출력 결과: 알고스팟 결과: #include using namespace std; bool move(int(*arr)[100], int _i, .. 더보기
YULO 문제 : https://algospot.com/judge/problem/read/YULON개의 정수 값을 받아서 정렬 알고리즘을 이용하여 내림차순 혹은 오름차순으로 정렬을 한다.정 가운데를 중심으로 0번째와 N번째, 1번째와 N-1번째, 2번째와 N-2번째 이런식으로 순차적으로 두수의 평균을 구하고 그중 가장 높은 값을 구한다.만약 수가 홀수개이면 정 가운데의 값을 위의 계산 방법으로 구한 가장 큰 수와 비교하여 높은 값을 구한다.출력 형태를 맞추기 위하여 printf를 이용하여 출력한다. 출력 결과:알고스팟 결과:#include #include using namespace std; int compare(const void *a, const void *b){ int *pa = (int *)a, *pb =.. 더보기
MAGICPOWER 문제 : https://algospot.com/judge/problem/read/MAGICPOWER문제에서 N개(1 N >> M; for (int i = 0; i > num; if (max < num) max = num; magic[num]++; } int no = 0; while (no < M){ if (max == 0) break; if (magic[max] != 0){ sum += max; magic[max]--; magic[max - 1]++; no++; } else max--; } cout 더보기
10038 - Jolly Jumpers 문제 원문 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=979 맨 먼저 입력받을 수의 갯수를 입력받고 그만큼 배열에 입력받는다.입력받으면서 이웃한 두 수의 차이만큼을 또다른 배열에 입력을 하고, 입력이 끝나는 시점에서 이웃간의 차이 배열을 정열 하고, 1부터 n-1까지 무든 수가 존재하는지 체크 한다.만약 중간에 틀리면 반복문을 종료하고 Not jolly를 출력하도록 하고 n-1까지 존재하면 Jolly를 출력하도록 한다. 출력결과 : UVa결과:#include #include int compare(const void *a, const void *b){ int *pa = (int.. 더보기
102 - Ecological Bin Packing 문제원문 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=38 빈병을 재활용 하기 위하여 3개의 상자에 각각 상자마다 갈색(brown), 녹색(green), 투명(clear) 순으로 순서대로 병을 넣고, 각각의 상자에 한가지 종류의 병만 들어 가도록 다시 정리를 하려고 할 때 병을 옮기는 행동을 가장 적게 하도록 하는 정렬 순서를 구하는 문제로 마지막에는 각각의 상자에 들어가는 병의 순서를 출력하고, 옮긴 횟수를 출력 하도록 하는 문제였다.정렬을 하는 우선 순위가 알파벳 순이라는 것을 기억한다면 어렵지 않은 문제이다.#include long MoveBottle(long One[3].. 더보기
101 - The Blocks Problem 문제원문 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=37 이 문제는 다음과 같은 특성을 예외 처리를 잘 하면 구현 할 수 있는 문제이다.move a onto b - a와 b블럭위에 다른 블럭들을 원래 위치로 돌려 보내고 a를 b 위로 옮긴다move a over b - a블럭 위에 다른 블럭을 원래 위치로 돌려보내고 a를 b 위로 옮긴다.pile a onto b - b블럭 위에 다른 블럭을 원래 위치로 보내고 a를 b위로 옮긴다.pile a over b - a를 b블럭으로 옮긴다.quit - 최종 상태를 출력한다.같은 블럭의 명령, 같은 블럭이 있는 경우, 그외 무시한다.리스트.. 더보기
100 - The 3n + 1 problem 문제 원문 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36 이 문제에서 등장하는 3n1p알고리즘은 숫자 n을 입력받아 n을 출력하고 n이 홀수 인경우 3n+1을 해주고 짝수인경우는 n/2를 해주어 1이 될때까지 반복하는 알고리즘이다. 이 문제에서는 i와 j를 입력 받고 입력받은 i와 j 그리고 i,j를 포함한 그 사이의 수들의 사이클 수 중에서 최대 값을 출력 하도록 하고 있다.#include int the3n1p(int n){ int result = 1; while (n != 1){ if (n % 2 == 1){ n *= 3; n += 1; } else{ n /= 2; } .. 더보기