본문 바로가기

분류 전체보기

(308)
[알고리즘] 플로이드 와샬 알고리즘 플로이드 와샬 알고리즘은 다익스트라 알고리즘처럼 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘은 출발 정점을 정하고 그 정점부터 가장 가까운 정점들을 선택해나가는데 비해, 플로이드 와샬 알고리즘은 모든 정점에서 모든 정점으로 최단 경로를 구한다. int INF = 1000000; int a[4][4] = { { 0, 5, INF, 8 }, { 7, 0, 9, INF }, { 2, INF, 0, 4 }, { INF, INF, 3, 0 } }; for(int k = 0; k < 4; k++) for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++ if (a[i][k] + a[k][j] < a[i][j]) a[i][j] = a[i][k] + a[k][j]; 코드 ..
23.02.02 - 파일 입출력2, 매크로, 레퍼런스 fseek(대상 파일 스트림, 이동할 바이트 수, 시작지점)바이트 단위로 프롬프트를 이동하고 동작 성공시 0, 실패시 -1을 반환시작지점은 SEEK_SET(시작지점), SEEK_CUR(현재 지점), SEEK END(끝 지점)으로 설정할 수 있다.ftell(대상 파일 스트림) - 현재 파일 지시자의 위치를 알려준다.ftell(스트림,0,SEEK_END)로 스트림이 대상으로 하는 파일의 크기를 알 수 있다. feof(대상 파일 스트림) - 파일 지시자가 EOF에 도달했는지 검사EOF에 도달한 경우 0이 아닌 값을 반환   매크로매크로는 단순 치환을 통해 함수 매크로 일 경우 자료형에 따라 별도 함수를 재선언 할 필요 없고 일반 함수 호출에 비해 속도가 빠르다는 것이 장점이다. 단점은 전처리기이기 때문에 오류..
[C++] 매개변수로 이중포인터를 사용해야 할 경우 void allocWithPoint(int* _p) { _p = new int(3); delete_p; } int main() { int* p = nullptr; allocWitPoint(p); cout
23.02.01 - 스트림, 콘솔 입출력, 파일 입출력 스트림 스트림은 흐름을 의미한다. 물이 흘러가듯이 바이트들이 순서대로 입출력되는 논리적인 장치를 스트림이라고 한다. 스트림은 단방향성을 띄기 때문에 입력, 출력 스트림이 따로 존재하고 내부적으로 버퍼를 가지고 있다. 버퍼는 임시적으로 데이터를 저장하고 컴퓨터는 버퍼에 데이터를 저장해놨다가 한꺼번에 처리한다. 콘솔 표준 입출력 스트림 stdin : 표준 입력 스트림 stdout : 표준 출력 스트림 stderr : 표준 에러 스트림 단일 문자 출력 함수 - putchar, fputc putchar(65);//콘솔 입출력만 사용 가능 fputc('A',stdout);//모든 입출력에 사용 가능 (파일 입출력도 가능) 단일 문자 입력 함수 - getchar, fgetc int ch = getchar(); in..
[C++] 우선 순위 큐 정렬 방법 변경 우선순위 큐는 기본적으로 내림차순으로 정렬한다. priority_queue pq; priority_queue; 평소에 두번째 줄로 많이 이용했는데 첫번째 줄이 우선순위 큐의 원형이다. 내부 컨테이너는 힙을 이용하기 때문에 compare 디폴트는 내림차순 정렬을 하는 비교 함수이다. T자리에 pair가 들어가면 디폴트로 첫번째 인자 기준 내림차순, 같다면 두번째 인자 기준 내림차순으로 정렬한다. priority_queue pq; priority_queueb; } }; 구조체를 이용해 우선순위 큐를 어떻게 정렬할지 커스텀으로 만들 수 있다. 우선순위 큐는 힙 구조인데 a는 부모노드이고 b는 자식노드이다. a가 b보다 클 경우 true를 반환하고 swap한다. 이 행위를 swap이 일어나지 않을 때까지 반복해..
[백준] 5430번 - 반전을 꼭 해야 할 필요는 없다. 조건에 맞춰 컨테이너를 반전시키거나 맨앞 요소를 빼는 문제이다. 그런데 R이 올 때마다 컨테이너를 반전시킬 필요는 없다. 반전되어있는지 여부만 변수로 저장한 다음 마지막에 반복자 rbegin, rend를 사용하여 역으로 출력해도 되고, 컨테이너를 deque로 만들어 반전이 아니라면 pop_front, 맞다면 pop_back해서 출력해도 된다. 나는 R이 올 때마다 반전을 시켜 시간초과 때문에 문제를 해결하지 못했었다.
23.01.31 - new, delete, 메모리 관리 함수 int* p = new int(3); new는 동적할당을 하는 연산자이다. 함수가 아니라 연산자다. 내부적으로 malloc으로 만들어졌으며 선언과 동시에 초기화를 할 수 있다. delete p; p = nullptr; delete 연산자도 내부적으로 free로 만들어졌다. free와 다르게 delete 후 포인터 p의 값은 변경되지만 이 역시 댕글링 포인터이므로 nullptr로 설정해줘야한다. int* pArray = new int[4]; int* pArray = new int[4]{10,20,30,40}; int* pArray = new int[4]{}; //{0,0,0,0} 동적배열을 생성하는 방법으로 역시 선언과 초기화를 동시에 할 수 있다. 메모리 관리 함수 memset(초기화할 공간 주소값, 채..
23.01.30 - 공용체, 동적 할당 공용체 union { int a; float b; short s; } un; 공용체는 구조체와 사용하는 문법이 동일하다. 다른 점은 모든 멤버 변수가 메모리를 공유해서 사용한다는 것이다. 공용체의 크기는 멤버 변수중 가장 큰 자료형의 크기 만큼만 할당한다. (위 un의 크기 4바이트) 멤버 변수 하나의 값만 바뀌어도 전체 멤버 변수의 값이 바뀐다. un u = { 4 }; cout