본문 바로가기

프로그래밍 언어들

CHAPTER02 - C언어 기반의 C++ CHAPTER 02의 시작에 앞서 - 상수(const)의 의미 => const int num = 10; // 변수 num을 상수화 => const int *ptr1 = &val1; // 포인터 ptr을 통해 val1의 값을 변경할 수 없으나, 다른 변수의 주소 저장 가능 => int const *ptr1 = &val1; // 포인터 변수 ptr을 상수화 => const int const *ptr1 = &val1; // 위의 두 가지 특성을 다 가진다. 1. 새로운 자료형 bool C언어에서는 별도로 매크로 상수로 지정해 주지만, C++에서는 'true'와 'false'가 존재한다. 위의 데이터를 저장하기 위한 자료형을 'bool' 이라고 한다. int, double과 같은 기본자료형의 하나이기 때문에 다.. 더보기
CHAPTER01 - C언어 기반의 C++ C++은 C언어를 포함한다. 때문에 C로 작성된 대부분의 프로그램은 C++ 컴파일러로도 컴파일이 가능하다. 그러나 C++은 C언어가 지니지 않는 문법적 특성도 제법 지니고 있다. 1. 헤더파일 선언문 #include C언어와 똑같이 헤더파일의 확장자는 .h이지만 C++에서는 표준 헤더파일의 선언에는 확장자를 생략하기로 약속되어 있다. 2. 입력과 출력 C언어에서는 서식문자를 통해 별도의 출력 및 입력 포맷을 지정해줘야 하지만 C++에서는 데이터의 타입에 따라 적절하게 동작하므로 더 편리하다. ( 문자열의 경우도 똑같다. ) 3. C++의 지역변수 선언 C의 경우 무조건 함수의 가장 처음 부분에 정의되어 있어야 하지만, C++의 경우 지역변수 선언은 함수 내 어디든지 가능하다. 4. 함수 오버로딩(Func.. 더보기
C언어 막대 자르기(Rod cutting in C) - 동적 프로그래밍(Dynamic-Programming) C언어 막대 자르기(Rod cutting in C) - 동적 프로그래밍(Dynamic-Programming) - 어떤 막대(rod)를 그들의 최종 값을 최대화하는 방식으로 작은 길이의 막대로 자르는 것 - 막대의 어느 부분을 자를 것인지 선택하는 간단한 문제 - 막대의 길이 n(inches)와 가격 p를 고려하여 자른 부위를 팔았을 때 얻을 수 있는 최고의 수익 r을 결정하는 것 - 만약 자른 길이의 가격이 충분히 크다면, 최적의 솔루션은 자르는 것을 전혀 요구하지 않는다. - 막대의 길이가 n이면 총 2ⁿ-¹의 다른 방식으로 자를 수 있다. ( 자르지 않는 경우의 수도 포함 ) the strategy of the rod-cutting, cite : introduction to algoritms 3/E .. 더보기
C언어 문제 - 홀수 또는 짝수의 합 차 구하기 (questions in C) C언어 문제 - 홀수 또는 짝수의 합 차 구하기 (questions in C) - 입력 받은 수가 홀수이면 더하고, 짝수이면 빼라. ( 0을 입력 받으면 종료하고, 최종 수를 출력하라. ) #include int main (void) { int n; int sum = 0; while( 1 ) { scanf("%d", &n); if( n == 0) { break; } if( n % 2 == 1) { sum = sum + n; } else { sum = sum - n; } } printf("%d\n", sum); } 더보기
C언어 문제 - 입력 받은 수의 합 구하기 (questions in C) C언어 문제 - 입력 받은 수의 합 구하기 (questions in C) - 양수 또는 음수를 입력 받아, 입력 받은 모든 수를 누적하라. ( 단 0 입력 시 종료하고, 최종 수를 출력하라. ) int main (void) { int n; int sum = 0; while( 1 ) { scanf("%d", &n); if( n == 0 ) { break; } sum = sum + n; } printf("%d\n", sum); } 더보기
C언어 문제 - 입력 받은 수가 소수 인지 판단하기 (questions in C) C언어 문제 - 입력 받은 수가 소수 인지 판단하기 (questions in C) int main (void) { int n; int i; scanf("%d", &n); i = 2; while( i 더보기
10장 - C언어 반복문(repetitive statement in C)(2) 10장 - C언어 반복문(repetitive statement in C)(2) - 반복문이란 조건이 참일 경우, 특정 루틴을 반복적으로 수행하는 것 이번에는 지난 9장에 이어 반복문에 대해서 조금 더 알아보도록 하겠습니다. 지난 강의에는 for에 대해서 했고, 이번에는 while과 do~while에 대해서 다룰 예정입니다. 반복문의 구조는 약간씩 다르지만, 그 기본은 같다는걸 명심하시면 쉽게 습득하실 수 있을 겁니다. ※ 조건이 참일 경우, 특정 루틴을 반복적으로 수행하는 것 1. while int main (void) { while( 조건 ) { // 반복 루틴 } return 0; } while의 기본 구조는 위의 예제와 같습니다. for문에 비해 상당히 간단한 구조죠? 조건만 존재하고, 해당 조건이.. 더보기
C언어 동적 프로그래밍(Dynamic Programming in C) C언어 동적 프로그래밍(Dynamic Programming in C) - 동적 프로그래밍은 하위문제들에 대한 해결책을 결합하는 방식으로 문제를 해결한다. - 일반적으로 동적 프로그래밍은 최적화 문제에 적용된다. - 동적 프로그래밍 알고리즘을 개발할 때, 다음과 같은 시퀀스를 따른다. (1) 최적의 해결책의 구조를 특징 짓는다. (2) 재귀적으로 최적의 해결책의 값을 정의한다. (3) 최적의 해결책의 값을 계산한다. (4) 계산된 정보를 바탕으로 최적의 해결책을 구성한다. 더보기
C언어 분기문(return, break, continue) C언어 분기문(return, break, continue) - 프로그램의 순차적 수행 순서에 따르지 않고 다른 명령을 수행하도록 이행 시키는 명령입니다. - 분기문에는 여러 종류가 있고, 각각 다른 특징을 가집니다. 1. return return은 자신(함수)를 호출한 곳으로 다시 되돌아가는 명령입니다. 아직 함수에 대해서 자세히 다루지는 않았지만, 이미 우리는 return 을 봤습니다. int main (void) { return 0; } C언어의 기본인 main 함수를 보면, return 을 포함하고 있습니다. return '상수 or 변수'; 의 구조로 사용이 되는데, 자신을 호출한 곳으로 돌아가면서, '상수 or 변수'의 값을 반환해 주는 것입니다. 위의 예제에서는 즉, main 함수를 호출한 곳.. 더보기
C언어 레드-블랙 트리 삭제 알고리즘(Red-Black Trees in C, deleting or removing algorithm) C언어 레드-블랙 트리 삭제 알고리즘(Red-Black Trees in C, deleting or removing algorithm) - 많은 검색-트리 구조 중 하나이다. - 기본 동적 명령들이 최악의 경우에도 O(lg n) 시간이 걸리도록 보장하기 위해 안정(balanced) 되었다. - 각 노드마다 하나의 추가적인 비트를 가지고 있다. - 편리한 상태처리를 위해 NIL을 나타내는 센티널 노드가 있다. - 다음 5가지의 특성을 만족하는 이진 트리이다. (1) 각 노드는 빨강 또는 검정색이다. (2) 루트(root)는 검정색이다. (3) 모든 leaf(NULL)은 블랙이다. (4) 만약 노드가 빨강이면, 해당 노드의 자식은 모두 검정이다. (5) 각 노드에 대해, 해당 노드에서 자식 노드까지의 모든 경.. 더보기