최신글
- [42서울] ft_containers[4] - 맵 구현 서론 key-value의 형태의 pair를 정렬된 순서로 저장하는 컨테이너. 각 key는 전부 고유한 값을 가지며, 검색과 삽입 삭제가 전부 O(log n)으로 효율적이다. 내부의 자료구조가 tree(주로 rbtree)로 구현되어있다. 서브젝트에서 얘기하듯이 배열 같은 ‘적합하지 않은’ 자료구조로 구현해서는 안되며, 20배 이상 차이가 나면 안 된다고 되어있기 때문에 BST 같은 지나치게 단순한 tree를 선택해도 안되고 자체적으로 밸런싱 기능이 있는 tree를 자료구조로 사용해야 한다. 맵의 항목들을 보면서 필요한 함수들을 트리에 구현하면 조금 더 편하다. 들어가야 하는 구성요소 Member types key_type: 맵의 키(Key) 유형 mapped_type: 맵의 값(Value) 유형 value.. 더보기
- [42서울] ft_containers[3] - 트리 구현 서론 원래 rbtree를 이용해서 구현하고 싶었는데, 제대로 이해하지 못한 상태로 대충 구현하고 나서 테스트를 해보니 map의 테스트에서 일부분 문제가 생겼다.(어느 부분인지는 map에서 설명) 내가 그걸 못고치는걸 보면서 이건 내가 이해한게 아니라고 생각해서 다른 bst를 찾아봤는데, splay tree라고 하는 간단하게 밸런싱을 하는 트리를 발견해서 그걸로 구현했더니 역시 문제가 생겼다. splay tree는 선형 체인에서 O(n)이어서 30만 개 선형 체인 테스트를 std::map보다 20배 이상 느려져서 통과하지 못했다. 그래서 그냥 힙스터 기질은 접고 다른 사람들처럼 avl tree로 구현하게 되었다. https://www.cs.usfca.edu/~galles/visualization/AVLtr.. 더보기
- [42서울] ft_containers[2] - 벡터 구현 서론 https://jhnyang.tistory.com/230 [자료구조STL vector 1탄]벡터란? 배열 vs 벡터 비교/장단점/ 특징, 다양한 백터 선언 및 초기화 방법, 안녕하세요 오늘은 C++ 자료구조 컨테이너 중 하나인 vector 라이브러리에 대해 살펴봅시다. [1탄 목차] 1. 벡터란 무엇인가? 2. 벡터의 구조와 특징 (장단점) 3. 언제 벡터를 사용하는가 4. 벡터를 사 jhnyang.tistory.com 동적 배열구조 클래스. 배열이지만 크기를 자유자재로 수정할 수 있는 배열이라고 생각하면 된다. 동적으로 메모리를 늘려주기 때문에 편해서 배열보다 더 자주 쓰인다. 각각의 원소를 [] 연산자를 통해 쉽게 접근할수있고, 임의의 순서로 메모리에 접근가능하다. 단점은 중간에 많은 데이터를 .. 더보기
- [42서울] ft_containers[1] - 스택 구현 서론 스택이란 LIFO(last-in first-out 후입선출)로 동작하는 자료구조로, cpp module에서(그리고 조금 다르지만 푸시스왑에서) 이미 가볍게 다뤄봤듯이 컨테이너의 한쪽 끝에서만 입력하고 출력하는 자료구조이다. 다른 컨테이너를 가져와서 그 컨테이너 위에서 동작하도록(캡슐화) 되어 있는데, 이 과제에서는 내가 만든 벡터를 이용하여 구현해야 한다. 하지만 우선 std::vector를 사용하여 구현을 먼저 하고 나중에 내가 만든 ft::vector로 바꾼 다음 정상적으로 동작하는지를 확인하면 될 거라고 생각했다. 이게 가장 쉽기도 하지만 구현 내용 자체가 많지 않고, 서브젝트상 추가로 구현해야 하는 내용이 없어서 가장 마음 편하게 접근할 수 있을 거라고 생각한다. 아래 기능을 지원하는 컨테이.. 더보기
인기글
- [42서울] Born2beroot 설치 및 세팅만 정리 주의! 이것만 보고 평가받으면 절대 통과할 수 없습니다. 이대로만 진행하면 평가를 받을 수 있는 상태가 되지만, 이 글은 평가를 통과하기 위한 글이 아님을 유의해주세요. 이 글은 평가표가 150줄 쯤 되는 대장정의 시작일 뿐입니다. 치트 시트 논란을 피하기 위해 일부러 설명은 빼고 적었습니다. 데비안 설치 https://www.debian.org/releases/stable/debian-installer/ 가서 amd64 다운로드 먼저 누르고 시작 command + space에서 vir 검색하면 바로 버츄얼박스 나옴 당연히 아무것도 없을테니 위에 new 클릭 이름과 설정 하고 Continue 누른 다음부터는 엔터 눌러서 넘겨도 됨 잘 되면 start버튼 클릭. 잘 안되면 대부분 goinfre 용량 문제임.. 더보기
- [42 서울] push_swap을 케이크처럼 쉽게 먹는 법 - 1 서론 push_swap은 42서울 2서클 과제로 2서클 과제 중 가장 난이도가 높은 것으로 알려져 있다. 책 개구리를 먹어라! 의 교훈대로 2서클에서 가장 어려운 과제를 먼저 잡았다. 과제의 내용은 인자의 숫자들을 스택 두 개에 제한된 명령어를 최대한 적게 사용해서 정렬하는 과제이다. 이를 위해 다양한 알고리즘을 공부하고 고민하며 해결 방법을 찾아서 구현해야 한다. 이 글은 두 편으로 나눠서 1편에서는 알고리즘 구현 전까지, 2편에서는 알고리즘에 대한 얘기를 할 것이다. 다만 처음에 알고리즘을 생각해서 풀었다가 만점을 받기 위한 최적화가 난해해서(인자가 100개일 때 만점이 나오지 않았다), 갈아엎고 과제를 통과하기 위한 코드로 다시 짰다. 그러다 보니 이 글을 보고 구현하면 이 과제에서 학습할 수 있는.. 더보기
- [42서울] 철학자(Philosophers)에게 밥을 먹이자 서론 이번 과제는 생각보다 오래 걸려서 8~9일 정도 소요되었던 것 같다. 완성은 해놓고 집에 내려갔다 오느라 블랙홀 2일 남기고 평가를 받았는데, 내 코드를 4일 만에 다시 봄 + 평가에 문제 생기면 블랙홀 12시간 남기고 재평가받아야 함이라는 두 가지 요소로 인해 평가 내내 정신이 나갈 것 같았다. 다음부터는 이런 식으로 평가받지 말아야겠다. 철학자 과제는 운영체제에서 유명한 문제인 "식사하는 철학자 문제"를 직접 구현해보는 과제이다. 식사하는 철학자 문제는 대표적인 “동시성 제어” 문제로 하나의 젓가락(또는 포크)를 두 명이 동시에 잡지 못하도록 하면서(상호 배제), 각자 하나의 젓가락을 들고 다른 사람의 젓가락을 요구하는 데드락을 피해야 한다. 상호 배제는 뮤텍스를 통해서 구현하고, 데드락은 예방.. 더보기
- [42서울] CPP Module 05 - 재사용성과 예외처리 서론 재사용성과 예외처리에 대한 과제이다. try-catch문과 exception을 사용해보면서 예외처리를 몸에 익히는 과제라고 생각하면 될 것 같다. ex00 거대한 관료체계의 관료 클래스를 만들어라 상수 name과 1~150 사이의 grade을 보유해야 한다. 만약 잘못된 등급을 받게 되면 Bureaucrat::GradeTooHighException이나 Bureaucrat::GradeTooLowException 함수를 호출하여 예외처리를 해야 한다. 생성자에서도 에러 발생 시 동일한 함수로 예외처리를 하라. getName과 getGrade 함수를 만들고 grade를 높이거나 낮추는 함수도 보유해야 한다. 1등급이 가장 높기 때문에 3의 grade를 높인다면 2가 된다. grade = grade; if.. 더보기