C
[C] 문자열에서 공백을 제거하는 함수
문자열 중앙에 있는 공백도 제거하는 함수가 필요해서 만들었다. 아래의 DeleteSpace함수는 인수로 받는 문자열에서 문자열에서 앞, 뒤, 가운데에 있는 모든 공백을 제거해서 제거된 문자열을 반환하는 함수다. 사용법: char *str = DeleteSpace("공백이 있는 문자열"); char str[] = DeleteSpace("공백이 있는 문자열"); #include #include char* DeleteSpace(char s[]) { char* str = (char*)malloc(sizeof(s)); int i, k = 0; for (i = 0; i < strlen(s); i++) if (s[i] != ' ') str[k++] = s[i]; str[k] = '\0'; return str; } i..
[C] 공백 포함 문자열 입력 받기 (scanf, gets, fgets)
#include #define LEN 1000000 int main(){ char str[LEN]; scanf("%s",str); printf("%s",str); } 1. scanf[] scanset character scanset character [] 를 scanf 함수에 추가해 주는 방법이다. [^"문자"]의 의미는 해당 문자가 나오기 전 까지 모든 문자열을 받겠다는 뜻이다. 개행(엔터)를 의미하는 문자인 "\n" 를 ^뒤에 넣어주면, 개행(엔터)가 나오기 전 까지 모든 문자열을 받겠다는 뜻이 된다. 따라서, 공백도 포함해서 입력을 받을 수 있게 되는 것이다. /* scanset character 예시 */ #include #define LEN 1000000 int main(void){ char s..
[C] 지역 변수 2차원 배열 동적 할당 및 해제 코드
#define _CRT_SECURE_NO_WARNINGS #include #include #include void main() { int n; scanf("%d", &n); // 동적할당 int** arr = (int**)malloc(sizeof(int*) * n); memset(arr, 0, sizeof(int*) * n); if (arr == NULL) return; for (int y = 0; y < n; y++) { arr[y] = (int*)malloc(sizeof(int) * n); memset(arr[y], 0, sizeof(int) * n); } for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) arr[y][x] += 1 + y + x;..
[C] main 함수에게 return 이란?
return 은 c언어의 예약어이다. 리턴값은 없거나 있다면 정수형이어야 한다. C++ 표준 문서(43p)에는 정확하게 It shall have a return type of type int, but otherwise its type is implementation defined 이렇게 되어 있다. main 함수의 리턴값은 int형의 타입을 가지는 것이 좋지만 구현 방식에 따라 다른 타입을 가지는 것도 가능하다. 즉 C++ 스팩은 int를 강력히 권장하기는 하지만 강요하지는 않는다. 비주얼 C++은 int, void 모두 가능한데 과거부터 이렇게 써 왔기 때문에 호환성을 더 중요시한다는 입장이다. gcc는 표준의 권고대로 main 함수의 리턴 타입으로 int만 인정한다. main 함수가 리턴하는 값을 탈..
[C] 이진 탐색 (Binary Search) 알고리즘 개념과 예제
이진 탐색 이진 탐색은 오름차순으로 정렬되어있는 데이터에서 원하는 값(타겟 넘버)의 위치를 찾아내는 알고리즘이다. 여기서 이진(Binary)는 우리가 알고있는 그 이진 코드 (0101001...) 가 아니라 데이터를 반(2개)으로 나누어서 비교하고 찾는 방식이여서 이진 탐색이라고 한다. 이진 탐색의 알고리즘 진행방식은 아래와 같다. 정렬되어있는 데이터의 중간 값을 임의의 값 X로 정함 타겟 넘버의 값과 X를 비교 타겟 넘버의 값이 X보다 크다면, 타겟 넘버는 데이터에서 X보다 우측에 위치해 있으니 반으로 나눈 데이터의 우측에서 1번 과정부터 다시 시작 타겟 넘버의 값이 X보다 작다면, 타겟 넘버는 데이터에서 X보다 좌측에 위치해 있으니 반으로 나눈 데이터의 좌측에서 1번 과정부터 다시 시작 이진 탐색 예..
C 난수 생성
C언어 프로그래밍에서 코드를 작성하다보면 무작위의 숫자가 필요한 경우가 존재한다. 보통 무작위 숫자를 난수라고 표현한다. C언어에서 난수를 표현하기 위해서는 stdlib.h 헤더파일에 포함되어있는 rand()라는 함수를 사용하면 된다. ☞ rand()함수 사용법 #include #include // rand() 함수 포함 라이브러리 int main() { int random = 0; // 정수형 변수 선언 for (int i = 0; i < 10; i++) { // 10번 반복 random = rand()%9; // 난수 생성 printf("%d\n", random); // 출력 } } 8번째 줄에 random = rand()%9; 라는 코드가 있다. 해석하면 rand() 함수에 의해 난수를 생성하고 그..
C 정렬 코드
선택 정렬 #include int size; // 배열의 크기 void selectionSort(int a[], int size) { int t, temp; printf("\n정렬할 원소 : "); for (t = 0; t = 1) { for (int i = 0; i >", interval); for (t = 0; t < inde..
C/C++ 연산자(Operator) 정리표 (비트, 논리, 산술 +=&^<<>>%~!)
논리 연산자(Logical operator) 연산자(Operator) 의미(Description) 예제(Example) && 모두 같으면 true를 return (a-3) && b || 하나만 true 면 true를 return a >3 || b > 오른쪽으로 비트 이동, 빈 곳은 0 x>>5
세그먼트 트리 (Segment Tree)
세그먼트 트리는 "구간을 저장하기 위한 트리" 이다. 예를 들어서 int Array[5] = { 1, 2, 3, 4, 5 } 2번째 값 부터 4번째 값 까지의 합은 2 + 3 + 4로 계산할 것이며 1번째 값 부터 5번째 값 까지의 합은 1 + 2 + 3 + 4 + 5로 계산하게 될 것이다. 특정 구간에 대한 연산이라면, 모든 합을 다 구해놓고 계산하는 방식을 생각할 수 있다. 이걸 1번 연산 이라고 칭하자. 2번 째 값을 7로 바꾸면 { 1, 7, 3, 4, 5 }. 이렇게, 특정 값을 바꾸는 연산 2번 연산 이라고 칭하자. 이 후에 2번째 값부터 4번째 값 까지의 합을 구하고 3번째 값부터 5번째 값 까지의 합을 구하고, 4번째 값을 6으로 바꾸는거와 같은 연산들이 쭉 이어진다고 생각해보자. 별로 문..