CMD명령어로 실행 결과를 메모장에서 확인하기
c언어 코딩 -> Dev C++ 이용해서 실행파일(exe) 생성 -> 입력용 txt파일, 출력용 txt파일 지정 ->
실행파일<입력용 txt파일>출력용 txt파일 명령어 실행!
파일 비교 명령어: fc 비교할 파일1 비교할 파일2
C++ 입/출력 최적화
int main(void) { // 입/출력 최적화 ios_base::sync_with_stdio(false); cin.tie(NULL); // <코드 시작> }
시간복잡도에 문제가 없는데 Time Out이 발생하는 경우, 입/출력 최적화 코드를 사용하면 됨
C4996 오류 무시
#pragma warning(disable:4996) #define _CRT_SECURE_NO_WARNINGS
scanf, fopen 함수 등 권장하지 않는 함수를 사용할 때 필요함
자료형과 형식지정자
long형은 32비트 운영체제에서 4바이트, 64비트 운영체제에서 8바이트
단, 윈도우 64비트에서는 4바이트
%d int %u unsigned int %ld long int %lu unsigned long int %lld long long int %llu unsigned long long int
프로그램 소요 시간 측정
#include<time.h> double start, finish,duration; start = clock(); // <실행 시간 측정할 소스> finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; // 1클락 = 0.001초 printf("%.3lf초입니다.\n\n", duration);
* 1초가 걸리는 입력의 크기
– O(logN)- O(N) : 1억
– O(nlogn): 5백만
– O(n^2) : 1만
– O(n^3) : 500
– O(2^n) : 20
– O(n!): 10
RAND_MAX 이상의 랜덤 수 여러 개 출력
#include <stdio.h> #define RAND_MAX 0x7fff int main(void) { for (int i = 0; i < 100; i++) { // 10만 이하의 랜덤 수 출력 int r=(int)(((double)((rand() << 15) | rand())) / (((RAND_MAX << 15) | RAND_MAX) + 1) * (100000)); printf("%d\n", r); } }
중복없는 랜덤 수 여러 개 출력
#include <stdio.h> #define True 1 #define size 100 // 100개 출력 #define max_num 1000 // 최대 랜덤 값 int main(void) { int rc[max_num] = { 0 }; // check list int r[size] = { 0 }; // list for printing for (int i = 0; i < size; i++) { // 1~1000 랜덤 수를 중복없이 출력 int ri = rand() % max_num + 1; while (rc[ri]) { // check리스트를 이용해서 중복 확인 ri = rand() % max_num + 1; } rc[ri] = True; r[i] = ri; // 저장 } for (int i = 0; i < size; i++) { printf("%d ", r[i]); } }
fprintf 이용해서 txt파일로 출력하기
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { FILE *file; file = fopen("e:/helloworld.txt", "w"); fprintf(file,"hello %d",123); }
동적 배열 세트
#include <stdio.h> #include <stdlib.h> int main() { // 쓰레기값이 채워진 동적 배열 int* array1 = (int*)malloc(sizeof(int) * 10); for (int i = 0; i < 10; i++) printf("%d ", array1[i]); printf("\n"); // 0이 채워진 동적 배열 int* array2 = (int*)calloc(10, sizeof(int)); for (int i = 0; i < 10; i++) printf("%d ", array2[i]); printf("\n"); // 동적 배열 확장 (확장된 요소는 쓰레기값 들어감) // size: 10 -> 11 array2 = (int*)realloc(array2, sizeof(int) * 11); for (int i = 0; i < 11; i++) printf("%d ", array2[i]); printf("\n"); // 동적 메모리 해제 free(array1); free(array2); return 0; }
C style
#include <iostream> using namespace std; int main() { // 크기가 size인 동적 배열 생성 (초기화:0) int size = 100; int* memory = new int[size]{}; // 출력 (동적 배열은 범위 기반 for문이 불가) for (int i = 0; i < size; i++) cout << memory[i] << " "; cout << endl; // 동적 메모리 해제 delete[] memory; return 0; }
C++ style
퀵 정렬
#include <stdio.h> #include <stdlib.h> //오름차순 비교 함수 int compare(int* first, int* second) { if (*first > *second) return 1; else if (*first < *second) return -1; else return 0; } int size=100; int* array = (int*)malloc(sizeof(int)*size); qsort(array, size, sizeof(int), compare);
직접 구현한 퀵 정렬 소스보다 최적화 되어 있음, c++은 ‘algorithm’ 헤더 파일의 sort함수 사용을 권장!!
최적화 되지 않은 퀵 정렬 소스는 아래 예제를 1초 안에 해결하기 힘듦
#include <stdio.h> #include <stdlib.h> //오름차순 비교 함수 int compare1(int* first, int* second) { if (*first > *second) return 1; else if (*first < *second) return -1; else return 0; } // 내림차순 비교 함수 int compare2(int* first, int* second) { if (*first > *second) return -1; else if (*first < *second) return 1; else return 0; } int main() { // 동적 배열 생성 및 랜덤 값 저장 int size = 100; int* array = (int*)malloc(sizeof(int)*size); for (int i = 0; i < size; i++) array[i] = rand() % 100; // 오름차순 정렬 qsort(array, size, sizeof(int), compare1); for (int i = 0; i < size; i++) printf("%d ", array[i]); printf("\n"); // 내림차순 정렬 qsort(array, size, sizeof(int), compare2); for (int i = 0; i < size; i++) printf("%d ", array[i]); return 0; }
< 이용 예시 >
ASCII Table
컴파일 에러 주의
main함수의 반환형을 void로 작성하면 컴파일 에러가 발생할 수 있다.
반드시 int로 작성하고 ‘return 0;’으로 마무리하는 것을 권장한다.
벡터 사용 주의
벡터를 인자로 넘겨줄 때 call by reference를 사용해야 효율적인 프로그램이 된다.
벡터는 배열과 달리 값을 복사해서 넘겨주므로(call by value) 시간 소요가 엄청나다.
즉 & 연산자를 반드시 기억하자!