본문 바로가기

알고리즘

[알고리즘] 기초 데이터구조(1) - 설명 * 가장 기본이되면서, 중요하기 때문에 모르겠으면 알때까지 공부하세요 데이터를 구축하는 방법으로는 배열과 연결리스트가 있다 배열은 인덱스를 이용해 접근하기 때문에, 접근하기가 쉽다 하지만 추가와 삭제의 경우에는 불편하다 중간에 추가를 하는경우, 한칸씩 미뤄줘야하고 / 삭제의 경우에도 한칸씩 땡겨줘야하기 때문이다 1차원배열을 만드는 코드 int *arr = (int*)malloc(sizeof(int)*100) 또는 int arr[100] 2차원배열을 만드는 코드 int **arr = (int**)malloc(sizeof(int*)*100) for(int i=0; i
[알고리즘] 재귀(2) - 예제 [문제1] 양의 정수 n을 입력 받아, 1부터 n까지의 합을 구하는 프로그램 #include int sum(int n){ if (n == 1){ return 1; } else{ return n + sum(n - 1); } } void main(){ int n; scanf("%d", &n); printf("%d\n", sum(n)); } [문제2] 양의 정수를 입력 받아, 각 자리의 수를 높은 자릿수부터 출력하는 프로그램 #include void mod(int n){ if (n >= 10){ mod(n / 10); printf("%d\n", n % 10); } else{ printf("%d\n", n); } } void main(){ int n; scanf("%d", &n); mod(n); } [문제3] ..
[알고리즘] 재귀(1) - 설명 재귀 알고리즘은 문제를 해결하는 과정에서 자기 자신을 사용하여 문제를 해결하는 것이다 예시로 1부터 n까지 합을 구하는 sum을 들어보겠다 Alg sum(n) 1. if (n=1) return 1 else return n + sum(n-1) 여기서 if(n=1)은 베이스케이스(base case)로 루프문을 나가기 위한 조건이 된다 else는 재귀케이스(recursive case)로 자기자신을 계속 호출한다 재귀 알고리즘 프로그램을 작성할때에 항상 베이스케이스(탈출조건)가 있어야하고, 재귀케이스는 베이스케이스를 향하는 방향으로 진행되어야 한다 예시에서는 n값이 1씩 감소하면서 베이스케이스n=1이라는 조건을 향하고 있다 출처 제목: 알고리즘 원리와 응용 저자: 국형준 출판사: 21세기사
[알고리즘] 알고리즘 분석(2) - 예제 [문제1] 나머지연산을 덧셈과 뺄셈만을 이용해서 실행하는 프로그램#include int mod(int num1, int num2) { while (num1 >= num2) { num1 = num1 - num2; } return num1; } void main() { int num1, num2; scanf("%d", &num1); scanf("%d", &num2); printf("%d", mod(num1, num2)); } [문제2] n x n 비트행렬(0과 1로 구성)에서 가장 많은 1을 포함하는 행을 찾는 프로그램 (n jmax) { row = i; jmax = j; } } return row; } void main() { int n; int matrix[100][100]; scanf("%d", &n)..
[알고리즘] 알고리즘 분석(1) - 설명 알고리즘이란?? - 주어진 문제를 유한한 시간 내에 해결하는 단계적 절차이다 데이터구조란?? - 데이터를 조직하고 접근하는 체계적 방식이다 우리가 좋은 프로그램을 만들기 위해서는 첫째로 소요되는 "실행시간"을 줄이고, 둘째로 "기억장소 사용량"을 최소화해야 한다 실행시간은 대체로 입력의 크기와 함께 증가한다 입력의크기란 프로그램이 처리해야 하는 어떤 큰 수의 자릿수라던가, 처리해야 하는 데이터원소들의 개수 등을 말한다 실행시간에는 최선실행시간, 평균실행시간, 최악실행시간이 있다 최선실행시간 - 제일 운 좋은 경우의 성능 평균실행시간 - 알고리즘을 평균적인 입력으로 실행한 결과 최악실행시간 - 어떤 알고리즘이 입력에대한 출력을 얻기 위해 가장 오랜시간이 걸리는 경우(분석이 비교적 용이) 실행시간을 구하는 ..