기타 – 코딩 테스트 용 SET


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

Ascii Table


컴파일 에러 주의

main함수의 반환형을 void로 작성하면 컴파일 에러가 발생할 수 있다.
반드시 int로 작성하고 ‘return 0;’으로 마무리하는 것을 권장한다.


벡터 사용 주의

벡터를 인자로 넘겨줄 때 call by reference를 사용해야 효율적인 프로그램이 된다.
벡터는 배열과 달리 값을 복사해서 넘겨주므로(call by value) 시간 소요가 엄청나다.
즉 & 연산자를 반드시 기억하자!

Leave a Reply

Your email address will not be published. Required fields are marked *