[자료구조] 이진 탐색 트리
이진 트리를 이용한 탐색 이전 포스트에서 이진 트리에 대해 알아보았습니다. 이번 포스트에서는 이진 트리를 활용한 이진 탐색 트리에 대해 알아보겠습니다. 이진 탐색 트리는 다음과 같은 특징이 있습니다. 키 중복 없음 특정 노드의 왼쪽 서브 트리는 특정 노드 보다 작은 키 값만 존재 특정 노드의 오른쪽 서브 트리는 특정 노드 보다 큰 키...
이진 트리를 이용한 탐색 이전 포스트에서 이진 트리에 대해 알아보았습니다. 이번 포스트에서는 이진 트리를 활용한 이진 탐색 트리에 대해 알아보겠습니다. 이진 탐색 트리는 다음과 같은 특징이 있습니다. 키 중복 없음 특정 노드의 왼쪽 서브 트리는 특정 노드 보다 작은 키 값만 존재 특정 노드의 오른쪽 서브 트리는 특정 노드 보다 큰 키...
프로그램의 소스 코드는 한 번에 완벽하게 작성할 수 없습니다. 팀 프로젝트에서는 한 팀원이 작성한 코드를 다른 팀원이 읽을 수 있고 개인 프로젝트에서도 기능을 추가하거나 수정하다 보면 이전 코드를 읽을 때가 있습니다. 여기서 이전 코드를 이해하는데 시간이 소모될 수 있고 최악의 경우, 매번 같은 코드 이해하고자 처음부터 다시 읽어야 될 수 있습니다. ...
코딩테스트 연습 - JadenCase 문자열 만들기 바로가기 문제 설명 잘못된 문제 접근 문제를 처음 풀 때, 마지막 제약 조건을 확인하지 못해서 C++ stringstream 을 활용한 풀이로 접근했었습니다. stringstream 은 문자열 속 공백 개수와 상관없이 공백이 존재한다면 그곳을 기준으로 공백이 아닌 부분만 반환하기...
이진 트리의 개념 이진 트리는 최대 차수가 2 인 트리입니다. 즉, 트리에 있는 모든 노드는 자식 노드의 수가 2개 이하로 갖고 있는 경우입니다. 2개 이하라고 한 이유는 트리 모양에 따라 이름이 다르기 때문입니다. 대표적으로 정 이진 트리, 포화 이진 트리, 완전 이진 트리, 균형 이진 트리 등이 있습니다. [모든 노드의 차수가 2인 이진 ...
Enum 이란? C++ 는 정수형, 실수형, 문자형 등 여러 자료형을 지원하고 있지만 사용자에 따라 C++ 에서 지원하지 않는 자료형이 필요할 수 있습니다. 이를 위해서 C++ 에서는 enum 이라는 자료형을 지원합니다. enum 은 enumerate(열거하다) 라는 단어의 약자로 여러 값들을 열거하고 정수형으로 사용할 수 있습니다. 컴파일러는 ...
트리의 개념 트리는 주요 자료구조 중 하나로 노드(Node)와 간선(Edge)들이 연결된 계층적 자료구조 입니다. 트리는 다양한 응용 분야에서 활용되며 특히, 계층적으로 데이터를 다루거나 데이터를 효율적으로 검색, 삽입, 삭제하는 작업에서 자주 사용됩니다. 단어 정리 기본 용어 설명 ...
이 포스트는 백준 사이트의 패션왕 신해빈 문제 풀이입니다. 문제 제약 확인 문제의 입력 조선에서 “같은 종류의 의상은 하나만 입을 수 있다.” 라고 하였으므로 옷의 각 종류에서 선택되는 것은 1개 입니다. 풀이 이 문제는 해시맵을 사용하여 간단하게 풀 수 있는 문제입니다. 예시 문제를 통해 수식을 만들고 코드를 작성해 보겠습니다. ...
서로소 집합을 찾기 서로 중복되지 않는 부분 집합들을 구현할 때, 사용되는 것이 Union-Find 알고리즘입니다. 예를들어, 여러 사람의 관계가 그래프의 노드(사람)과 엣지(관계)로 표현될 때 관계 그래프의 총 개수를 확인할 수 있습니다. 이때, 반드시 확인해야 할 것은 두 집합이 반드시 상호 배타적인 부분 집합(서로소 집합) 이여야 한다는 점입니...
이 포스트는 개인적으로 C++ 스마트 포인터를 공부하며 기록한 내용으로 이후 변경될 수 있습니다. 메모리 낭비하기 C++ 는 new 연산자로 메모리에 동적으로 할당하고 사용이 끝나면 delete 연산자로 사용중인 메모리를 해제합니다. 그러나 코드가 복잡해지면 delete 를 너무 일찍 사용해서 이미 해제된 메모리에 접근하거나, delete 자체...
이 포스트는 TDD 를 공부하기 위해 작성된 글로 잘못된 내용이 있으면 댓글 부탁드립니다. TDD 개념 잡기 TDD 는 Test Driven Development 의 약자로 테스트 주도 개발 이라고 합니다. 반복적으로 테스트를 진행해서 프로그램을 완성하는 소프트웨어 개발 방법론 중 하나로 작은 단위 테스트들을 작성해 이를 통과한 코드만 추가하는 ...