프로그래밍 언어/C++
[C] while 반복문을 종료하는 방법: 센티넬, EOF, 플래그
카운터 제어 while 반복문 반복 횟수를 알고 있다면 카운터를 사용해 while문을 종료시킬 수 있다. while문을 카운터 조건을 통해 종료하려고 하는데, 카운터를 증가시키거나 감소시키는 코드를 까먹고 적지 않았다면 무한루프가 발생할 우려가 있다. 조건은 구문이 시작될 때 적어야 하는데, 조건을 충족할 수 있게 제어하는 코드는 while문 내부에 있어서 이런 실수가 발생할 확률은 은근히 높다. 따라서 이 경우에는 for문을 사용하는 것이 일반적이다. #include using namespace std; int main() { int counter = 0; while (counter > num; } cou..
[C++] EOF(End Of File) 처리 방법
1. scanf()가 입력받은 인자의 갯수를 리턴하는 특성을 활용하는 방법 #include int main() { int a, b; while (scanf("%d%d", &a, &b) == 2) // scanf는 입력받은 갯수를 리턴한다 // 만약에 scanf("%d",&a); 에서 입력이 제대로 들어왔다면 1이 리턴된다. // 그렇기 때문에 a,b를 입력받는 scanf가 2와 같다면이란 말은 입력이 있다면과 같은 말이다 printf("%d\n", a + b); } 2. scanf()를 EOF와 직접 비교하는 방법 #include int main(){ int a,b; while(scanf("%d %d",&a,&b) != EOF) // EOF == End Of File // 말그대로 파일의 끝에 도달하면..
[C] 자료형 - 정수/실수
자료형이란? 메모리에 데이터가 저장되는 형식이다. 자료형마다 메모리 공간을 다르게 할당되는데, 예를 들어 int의 경우 4byte, char의 경우 1byte 이다. 자료형에는 정수형과 실수형으로 나눠진다. 정수형에는 char, short, int, long 이 존재하고 실수형에는 float, double, long double이 존재한다. 참고 : bit 와 byte 1byte는 8bit를 나타낸다. 종종 컴퓨터보면 32bit, 64bit로 나눠지는것을 본적이 있다. 이는 CPU가 한번에 처리하는 비트의 수로 32bit는 한번에 32개의 bit를 처리하고, 64bit 64개의 비트를 처리한다. 사용 범위 - 정수형 char : 1byte(8bit) : -128 ~ 127 short : 2byte(16b..
[C] 서식 지정자의 모든것 (서식문자)
서식 지정자란? printf, scanf, sprintf, fprintf 등의 여러 API 에서 가변인자를 받아서 처리하기 위한 데이터 포맷이다. 가변인자를 처리하는 API 함수 내부에서 어떤 인자를 어떤식으로 처리할지 지정하기 위해서 사용한다. 여러 API 에서 가변인자를 서식 지정자를 통해 처리하는데 printf 와 scanf 만 비교해봐도 서식 지정자로 특정할 수 있는 자료형의 스펙이 조금씩 다르다. printf 는 타입을 전달받아 데이터를 출력하기 때문에 형변환(type casting) 및 형승격(type promotion) 을 통해 크기가 다른 타입에 대해서 유연한 메모리 처리가 가능하지만, scanf 는 포인터를 전달받아 입력받은 데이터를 저장하기 때문에 서식 지정자에 의존하여 메모리 처리를 ..
[C] 피보나치 수열과 메모이제이션
피보나치 수열은 수학에서 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. 점화식은 Fn = Fn-1 + Fn-2으로 정리된다. 재귀 함수를 이용한 풀이 #include long long fibo(int n); int main(){ printf("%lld", fibo(10)); return 0; } long long fibo(int n){ if (n < 2) return n; return fibo(n-1) + fibo(n-2); } 당장 fibo(100)만 넣어보면. 프로그램이 계산하다가 뻗어버리는 모습을 볼 수 있다. 불필요한 호출이 일어나서 프로그램이 느려지는건데 간단히 fibo(10) 을 계산하려면 fibo(9), fibo(8) 이 호출되고 fibo(9)가 다시 fib..
[C++] min max 함수 (algorithm 라이브러리)
0. std::min & std::max 1. ①비교할 값들이 많거나, ②ArrayㆍVector와 같은 일련의 컨테이너에 저장되어 있다면, 최소값ㆍ최대값을 구하기 위해 min_element 또는 max_element 함수를 사용할 수 있다. (해당 함수에 대해서는 나중에 포스팅 하겠다.) 2. std::min와 std::max는 algorithm 라이브러리에 3가지 형태로 존재한다. 『① Default Constructor 』 『② Custom Constructor 』 『③ Initializer List Constructor 』 가 이에 해당한다. 1. std::min & std::max 『① Default Constructor 』 함수 원형 /* -- Default Constructor -- */ #i..
[C] min max 매크로함수
1. The old C macro way 매크로 원형 /* min */ #define min(a, b) (((a) (b)) ? (a) : (b)) 단점 : double-evaluation side effect 발생 /* Input */ #include #define min(a, b) (((a) (b)) ? (a) : (b)) int main(int argc, char * argv[]) { int a = 2, b = 3; printf("%d\n", min(a, b)); printf("a : %d b : %d\n\n", a, b..
[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] 재귀함수(Recursive/리쿼시브)의 개념과 공부하는 이유
재귀란 무엇인가? 컴퓨터 과학에 있어서 재귀(再歸, Recursion)는 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻하며, 이를 프로그래밍에 적용한 재귀 호출(Recursive call)의 형태로 많이 사용된다. 또 사진이나 그림 등에서 재귀의 형태를 사용하는 경우도 있다. (위키백과) 위키백과에서 가져온 재귀의 컴퓨터 과학 측면에서의 정의이다. 쉽게 말해서, "재귀적으로 정의했다" 라는 말은 자기 자신을 정의할 때 자기 자신을 이용했다는 것이다. 가령 5! (5 팩토리얼)을 정의할 때도, 5! = 5 * 4! 라고 나타낼 수 있으므로 이를 일반화하면 n! = n * (n - 1)! 라고 나타낼 수 있게 된다. 이 등식에서 팩토리얼을 정의하는데 있어서 팩토리얼을 사용했다는 것은, 재귀적 정의를 활..
[C++] 공백 포함 문자열 입력받기
1. getline 이용 getline을 쓰면 알아서 공백 포함하여 문자열을 입력받는다. int main() { string s; getline(cin, s); cout