분류 전체보기 281

재귀 알고리즘

직접 재귀: 자신과 같은 함수를 호출 간접 재귀: 함수 a가 함수 b를 호출하고 다시 함수 b가 함수 a를 호출하는 구조 순차곱셈 (팩토리얼) int factorial(int n){ if(n > 0) return n * factorial(n-1); else return 1; } 유클리드 호제법(최대공약수) int gcd(int x, int y){ if(y == 0) return x; else return gcd(y, x%y); } 하노이의 탑 작은 원반이 위에, 큰 원반이 아래에 위치할 수 있도록 원반을 3개의 기둥 사이에서 옮기는 문제. 모든 원반은 규칙에 맞게 첫 번째 기둥에 쌓여 있고, 이 상태에서 모든 원반을 세 번째 기둥으로 최소의 횟수로 옮겨야 함. 해결 방법: 맨 밑의 원반을 제외한 위의 원..

큐(queue): 선입선출 구조 인큐(enqueue): 데이터를 넣음 디큐(dequeue): 데이터를 꺼냄 프런트(front): 데이터를 꺼내는 쪽 리어(rear): 데이터를 넣는 쪽 배열로 큐 만들기 배열 que[]={1, 2, 3} 인큐: que[3] = 4; 디큐: x = que[0]; -> 이후의 모든 요소를 한 칸씩 앞으로 옮김: 복잡도 O(n) ! 링 버퍼로 큐 만들기 링 버퍼: 배열의 처음과 끝이 연결되었다고 보는 자료구조 첫 번째 요소가 front, 마지막 요소가 rear-1 프런트와 리어의 값을 업데이트하며 인큐와 디큐를 수행하므로 복잡도 O(1) ! 헤더파일 IntQueue.h #ifndef __IntQueue #define __IntQueue typedef struct { int ma..

매개변수 전달

값에 의한 전달(Call By Value) 호출 함수와 피호출 함수의 인자 값은 같지만 메모리는 독립적 int Add(int x, int y){ int x = x + y; return z; } int main(void){ int x = 3; int y = 5; int sum = Add(x, y); printf("%d", sum); //8 return 0; } 참조에 의한 전달(Call By Reference) 호출 함수와 피호출 함수의 인자는 같은 개체 호출 함수에서 메모리 주소를 전달 (포인터 매개 변수 사용) void swap(int *x, int *y){ int temp = *x; *x = *y; *y = temp; } int main(void){ int x = 3; int y = 5; swap(&..

[프로그래머스] 등수매기기(C)

#include #include #include // score_rows는 2차원 배열 score의 행 길이, score_cols는 2차원 배열 score의 열 길이입니다. int* solution(int** score, size_t score_rows, size_t score_cols) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. int* answer = (int*)malloc(sizeof(int)*score_rows); double* avg = (double*)malloc(sizeof(double)*score_rows); for(int i=0;i

[프로그래머스] 문자열 계산하기(C)

#include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. int solution(const char* my_string) { int answer = 0; int index =0; char array[] = "0123456789+- "; int num = 0; int flag_num = 0; int flag_sign = 1; int i; while(index < strlen(my_string)){ for(i=0;i flag_num while문을 나온 후에도 마지막 숫자를 더하거나 빼줘야 함

[프로그래머스] 영어가 싫어요(C)

내가 작성한 풀이 #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. long long solution(const char* numbers) { long long answer = 0; char* ptr; ptr = numbers; while(strncmp(ptr,"",1)!=0){ answer *= 10; if(strncmp(ptr,"zero",4)==0) ptr += 4; else if(strncmp(ptr,"one",3)==0) {answer+=1; ptr += 3;} else if(strncmp(ptr,"two",3)==0) {answer+=2; ptr += 3;} else if(strncmp(ptr,"..

[프로그래머스] 잘라서 배열로 저장하기(C)

#include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char** solution(const char* my_str, int n) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. int len = strlen(my_str); char** answer = (char**)malloc(sizeof(char*)*(len/n)); for(int i=0; i