728x90

자료구조 33

DataStructure] C언어로 쉽게 풀어쓴 자료구조 10장 - 1

2학년 당시, 교재로 사용했던 책이다. 생능출판에서 나온 'C언어로 쉽게 풀어쓴 자료구조'라는 책의 10장 그래프 파트에 있었던 이론적인 문제들을 복습하면서 풀어봤는데, 풀면서 나온 자료를 올린다. 골치 아파하는 대학생들을 위해 조금의 참고자료가 되었으면 하지만, 이를 그대로 복사 붙여넣기 하는 것은 자기 실력 발전에 전혀 도움되지 않는다는 사실만을 알았으면 좋겠다. 혹시라도 답이 틀린 부분이 있거나, 의문이 남는 부분이 있다면 언제든지 댓글은 환영합니다. 1. 다음 중 그래프에 대한 설명으로 틀린 것은? (4) 그래프에는 사이클이 존재하면 안 된다. 2. 인접 행렬 adj_mat[][]에서 어떤 정점 v의 진출 차수를 알고 싶으면 어떻게 하면 되는가? (1) 인접 행렬의 v번째 행의 값들을 전부 더한다..

백준] 1406 - 에디터(CHCI 2004)

시간 제한 : 0.3초메모리 제한 : 512MB 입력첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수를 나타내는 정수 N(1≤N≤500,000)이 주어진다. 셋째 줄부터 N개의 줄에 걸쳐 입력할 명령어가 순서대로 주어진다. 명령어는 위의 네 가지 중 하나의 형태로만 주어진다. 출력첫째 줄에 모든 명령어를 수행하고 난 후 편집기에 입력되어 있는 문자열을 출력한다. 소스코드#include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(false); cout.tie(NULL); st..

해시테이블(Hash Table)과 체이닝(Chaining)에 대한 간략한 정리

해싱과, 해시테이블 그리고 충돌을 처리하는 체이닝 기법에 대해서 한 번 정리해보자.이 글을 시작하기에 앞서, 스택오버플로우의 많은 자료들 그리고 위키피디아, 각종 유튜브 강의를 참고했다는 사실을 먼저 알립니다. 해시와 해시함수 해시 함수(Hash Function)는 데이터의 효율적인 관리를 위해 길이가 각기 다른 데이터를 고정 길이로 매핑하는 함수다. 이 때 매핑하는 과정을 해싱(Hashing)이라고 하며, 매핑하기 전의 데이터를 키(Key), 매핑 후의 데이터를 해시 값(Hash Value; 때로는 Value)이라 한다. 해시의 목적 해시 테이블(Hash Table)해시 테이블은 데이터의 해시 값을 테이블 내 주소로 이용해먹는 탐색 알고리즘으로, 잘 구현하면 이진 탐색보다 빠르게 처리할 수 있다. 암호..

백준] 10546 - 배부른 마라토너(COCI 2014/2015)

시간 제한 : 1초메모리 제한 : 64MB 입력첫째 줄에는 참가자 수 N이 주어진다. (1 ≤ N ≤ 105)N개의 줄에는 참가자의 이름이 주어진다.추가적으로 주어지는 N-1개의 줄에는 완주한 참가자의 이름이 쓰여져 있다. 참가자들의 이름은 길이가 1보다 크거나 같고, 20보다 작거나 같은 문자열이고, 알파벳 소문자로만 이루어져 있다.참가자들 중엔 동명이인이 있을 수도 있다. 출력마라톤을 완주하지 못한 참가자의 이름을 출력한다. 소스코드 #include #include #include using namespace std; int main(void) { map list; int n; string tmp; cin >> n; for (int i = 0; i > tmp; if (l..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 3장 - 1

1. C언어에서 배열에 대하여 다음 중 맞는 것은?답 : (2) 배열의 이름은 포인터와 같은 역할을 한다. 오답노트(1) 3차원 그 이상의 배열도 가능하다.(3) 배열의 인덱스는 0에서 시작한다.(4) 선언한 다음, 실행 도중에 크기를 변경하는 것은 불가능하다. 2. 다음 중 배열에 관한 문장 중 문법에 맞지 않는 것은?답 : (4) char *pb[30]="I am a student"; 해당 배열은 2차원 배열인데, 1차원 배열 초기화 방식을 사용하여 문제가 생긴 것. 3. float a[100]으로 선언되 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가?답 : (4) 1040번지 1000+4*10 4. 구조체에 관한 내용 중 틀린 것은?답 : (2) 구조체 변수..

두근두근 자료구조 2장 프로그래밍 프로젝트 1번

어떤 것들은 심심할 때마다 다시 공부하곤 하는데, 자료구조도 그 중 하나다. 개인적으로 공부하면서 정리한 것들이고 답이 틀렸을 수도 있기 때문에 지적은 언제나 환영한다. #include #pragma warning(disable:4996) #define MAX_DEGREE 101 typedef struct { int degree; float coef[MAX_DEGREE]; } Polynomial; Polynomial read_poly() { int i; Polynomial p; printf("다항식의 최고 차수를 입력하시오: "); scanf("%d", &p.degree); printf("각 항의 계수를 입력하시오 (총 %d개): ", p.degree + 1); for (i = 0; i b.degree)..

두근두근 자료구조 2장 연습문제

어떤 것들은 심심할 때마다 다시 공부하곤 하는데, 자료구조도 그 중 하나다. 개인적으로 공부하면서 정리한 것들이고 답이 틀렸을 수도 있기 때문에 지적은 언제나 환영한다. 1. int a[10][20]에서 배열이 차지하는 메모리 공간의 크기는 얼마인가? int형은 4바이트라고 하자.(4) 800 바이트, 10x20x4 2. float a[100]으로 선언된 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가?(4) 1040번지, 1000+10x4 3. 다음 배열 중에서 크기가 가장 큰 배열은?메모리 크기 기준(2) double array2[10]; 10x8 = 80바이트인덱스 크기 기준(3) char array3[40]; 40 4. 크기가 10인 배열 two[]를 선언하..

백준] 7785 - 회사에 있는 사람(KBTU)

시간 제한 : 1초메모리 제한 : 128MB 입력첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 출근, "leave"인 경우는 퇴근이다.회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 출력현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다. 소스코드 #include #include #include #include #include using namespace std; int main(void) { int n; map list; cin >> n; while (n--) { string ..

C++ STL list의 기본적인 사용법 정리

C++로 알고리즘 문제를 풀다 보면 STL을 자주 사용한다. 다양한 방식으로 자료를 다루는 스택, 큐, 링크드 리스트 등을 직접 구현하지 않아도 최적화된 환경에서 잘 이용해먹을 수 있게 해주는 도구로, 이번 포스트에서는 STL에서 list에 대해 간단하게 다뤄볼까 한다. 사실, 다룬다는 개념보다는 정리한다는 측면이 더 강할 것이다. list는 순차적인 컨테이너로, 메모리 할당은 연속적으로 이루어지지 않는다. vector와 비교했을 때, 랜덤 접근이나 탐색 측면에서는 vector가 더 좋은 성능을 보이지만, 특정 위치를 정해둔 상태에서 삽입이나 삭제가 이루어질 경우에는 vector에 비해 빠르다는 장점을 가지고 있다. 종합적으로 볼 때, list는 중간 데이터 삭제와 삽입이 자주 발생하면서, 순차적으로 저..