전체 글
C / LINUX fclose() fcloseall()
함수 기능 오픈된 파일 스트림을 닫는 라이브러리 함수 함수 원형 #include int fclose(FILE *fp); int fcloseall(); 리턴 값 : 성공시 0, 에러시 EOF 함수 파라메터 fp 닫으려는 파일 파일포인터 함수 예제 #include #include int main(void){ char *fname = "ssu_test.txt"; FILE *fp; if((fp = fopen(fname,"r"))==NULL){ fprintf(stderr,"fopen error for %s\n", fname); exit(1); } else{ printf("Success!\n"); printf("Opening \"%s\" in \"r\" mode!\n",fname); } fclose(fp); exi..
C / LINUX fopen() freopen() fdopen()
함수 기능 fopen 파일을 여는 함수 freopen 파일을 닫고 다시 열어주는 함수 fdopen 파일을 파일 디스크립터로 여는 함수 함수 원형 #include FILE *fopen(const char *filepath, const char *mode); FILE *freopen(const char *filepath, const char *mode, FILE *fp); FILE *fdopen(int fd, const char *mode); 리턴 값 : 성공 시 파일포인터 , 에러시 NULL 리턴 함수 파라메터 filepath 열려고하는 파일의 경로 mode r,rb - 파일을 읽기전용으로 오픈 w,wb - 파일을 쓰기전용으로 오픈 a,ab - 파일에 데이터를 추가하기 위해 오픈 r+, rb+, r+b -..
C / Linux open() 함수
함수 기능 파일을 오픈하거나 생성할 때 사용하는 system call 함수 원형 #include #include #include int open(const char *pathname, int oflag, mode_t mode) 함수 파라메터 pathname 파일의 경로 oflag (필수) O_RDONLY - 읽기모드 O_WRONLY - 작성모드 O_RDWR - 읽기/작성 모드 (선택) O_APPEND - 파일 작성시 기존 파일의 마지막 부분부터 이어 작성 O_CREAT - 파일 생성 O_EXCL(exclusive) - O_CREAT와 함께 사용하며 만약 파일이 존재한다면 에러리턴 O_TRUNC - 파일이 있으면 파일 초기화하며 OPEN mode_t mode O_CREAT 사용시 사용해아하는 옵션이다. 파..
c++ 알고리즘 공부 11 - 재귀
재귀는 하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘입니다. 지금 여기서 제대로 이해를 하고 가야 나중에 재귀를 이용해 문제를 푸는 과정에서 헤매지 않습니다. 우리가 어떤 문제를 재귀로 푼다는 것은 곧 귀납적인 방식으로 문제를 해결하겠다는 것인데 이 귀납적인 방식이란게 지금까지의 우리의 상식과 큰 차이가 있습니다. 올바른 재귀 함수는 반드시 특정 입력에 대해서는 자기 자신을 호출하지 않고 종료되어야 합니다. 이러한 입력을 base condition 내지는 base case라고 합니다.그리고 모든 입력은 base condition으로 수렴해야 합니다. 이 코드를 보면 n = 0일 때 자기 자신을 호출하지 않고 종료가 되니 이것이 base condition이고 우리는 이 함수에 자연수만 ..
c++ 알고리즘 공부 10 -DFS
일단 DFS의 정의는 다차원 배열에서 각 칸을 방문할 때 깊이를 우선으로 방문하는 알고리즘입니다. 참고로 BFS는 깊이 대신 너비를 우선으로 방문하는 알고리즘이었습니다. 과정을 먼저 소개해보면 뭔가 어디서 본 것 같다는 느낌을 받을텐데, 바로 BFS의 과정에서 딴건 다 똑같고 큐만 스택으로 바뀐 것 뿐입니다. 큐를 쓰면 BFS이고 스택을 쓰면 DFS가 됩니다. 이번에는 DFS로 상하좌우로 나와 인접한 같은 색의 칸을 방문하는 Flood Fill을 해결해보겠습니다. 이렇게 스택이 비는 순간 과정은 종료됩니다. DFS도 BFS처럼 Flood Fill이 필요할 때 사용할 수 있음을 알 수 있습니다. 그런데 보면서 느끼셨을지 모르겠지만 BFS와 DFS 모두 비록 최종적인 방문 결과는 똑같더라도 방문 순서에서 아..
c++ 알고리즘 공부 9 -BFS 넓이 우선 탐색
Flood Fill 이란 페인트 기능인데 이는 외부 윤곽선을 따라서 구분되는 영역의 색을 한꺼번에 바꾸는 거고, 이런걸 Flood Fill이라고 부르기도 합니다. BFS란 다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 방문하는 알고리즘입니다. 원래 BFS는 그래프라는 자료구조에서 모든 노드를 방문하기 위한 알고리즘입니다. 여기서 말하는 그래프는 우리가 흔히 아는 왼쪽과 같은 형태의 그래프가 아니라 정점과 간선으로 이루어진 자료구조입니다. BFS 알고리즘에서는 좌표를 담을 큐가 필요합니다. BFS 알고리즘이 시작되면 우선 (0, 0)에 방문했다는 표시를 남기고 해당 칸을 큐에 넣습니다. 이 초기 세팅이 끝난 후에는 큐가 빌 때까지 계속 큐의 front를 빼고 해당 좌표의 상하좌우를 살펴보면서 큐에 넣..
c++ 알고리즘 공부 8 - 스택활용
이와 같이 수식의 괄호 쌍이란, 주어진 괄호 문자열이 올바른지 판단하는 문제입니다. 저희가 눈으로 보면 괄호 문자열이 올바른지 아닌지 판단할 수 있습니다. 그런데 혹시 머릿속에서 어떤 로직을 거쳐서 판단을 하시나요? 우리는 이걸 코드로 구현해내는게 목표이니 로직을 잘 생각해볼 필요가 있습니다. 쉬운 것 부터 하나씩 해보는게 좋을 것 같아서 일단 괄호의 종류가 1개인 경우만 다뤄보겠습니다. 그런데 괄호가 여러 종류일 때에는 여는 괄호의 갯수와 닫는 괄호의 갯수 만으로는 해결이 되지 않습니다. 예를 들어서 지금 슬라이드의 저 두 괄호 문자열을 생각해보면 위는 올바르고 아래는 올바르지 않습니다. 그런데 둘 다 ) 의 갯수가 ( 을 넘은 적도 없고, } 의 갯수가 { 을 넘은 적도 없었습니다. 대신 붙어있는 (..
c++ 알고리즘 공부 7 - 덱
덱은 Restricted Structure의 끝판왕과 같은 느낌의 자료구조인데, 양쪽 끝에서 삽입과 삭제가 전부 가능합니다. 참고로 자료구조의 덱은 deque고 Double Ended Queue라는 뜻을 가지고 있습니다. 우리가 하스스톤이나 유희왕에서 얘기하는 덱은 Deck라서 발음은 둘 다 덱으로 똑같긴 해도 다른 단어입니다. 아무튼 덱은 양쪽 끝에서 삽입과 삭제가 전부 가능한 자료구조이니 스택과 큐를 덱의 특수한 예시라고 생각해도 괜찮겠습니다. 덱에서도 삽입, 삭제, 제일 앞/뒤 원소의 확인이 다 O(1)입니다. 그리고 제일 앞/뒤가 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능한데 독특하게도 STL deque에서는 인덱스로 원소에 접근할 수 있습니다. STL stack, queue에서 불가능했..
c++ 알고리즘 공부 6 - 큐
큐는 한쪽 끝에서 원소를 넣고 반대쪽 끝에서 원소를 뺄 수 있는 자료구조입니다. 스택에서는 먼저 들어간 원소가 나중에 나왔는데 큐에서는 먼저 들어간 원소가 먼저 나오게 됩니다. 공항에서 입국수속을 하는 줄과 같은 상황이라고 볼 수도 있습니다.스택을 FILO(First In Last Out)이라고 한 것과 비슷하게 큐를 FIFO(First in First Out)이라고 하기도 합니다. 큐에서 연산의 시간복잡도를 보면 스택처럼 원소의 추가와 제거가 모두 O(1)입니다. 스택에서는 보통 원소가 추가되고 제거되는 곳을 top이라고 부르고, 원소가 위 아래로 배치된 것으로 생각을 많이 하는데 큐에서는 추가되는 곳을 rear, 즉 뒤쪽이라고 하고 제거되는 쪽을 front, 즉 앞쪽이라고 합니다. 아무튼 가장 앞쪽에..
c++ 알고리즘 공부 5 - 스택
자료구조에서의 스택은 뭐냐하면, 바로 한쪽 끝에서만 원소를 넣거나 뺄 수 있는 자료구조입니다. 대충 프링글스 통을 생각하면 이해가 쉬울 것입니다. 아니면 엘리베이터를 생각해도 되겠습니다. 스택은 구조적으로 먼저 들어간 원소가 제일 나중에 나오게 되는데, 이런 의미로 FILO(First In Last Out) 자료구조라고 부르기도 합니다. 참고로 큐나 덱도 스택처럼 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려있습니다. 그래서 스택, 큐, 덱을 묶어서 Restricted Structure라고 부르기도 합니다. 스택은 특정 위치에서만 원소를 넣거나 뺄 수 있게 제한을 둔 대신에 원소의 추가와 제거가 모두 O(1)입니다. 나중에 구현을 같이 해보겠지만 우리가 배열의 끝에서 원소를 추가/제거할 때 시간..