자료구조 11

자료구조 <의사결정트리> 알고리즘 이해

의사결정트리 부모 자식을 나타내는 알고리즘 서브트리 트리의 리부를 때다가 보면 그 친구도 트리형태를 띄고 있다라는 것 즉, 트리의 일부도 트리다. 재귀적이다. 그럼 재귀함수를 이용해서 탐색하고 호출할 수 있게 된다. 이진트리 자식을 최대 2개까지만 제한하는 것이 이진트리이다. 공집합도 이진트리에서는 노드로 간주 비어있는 노드도 자식노드라고 이해해야 한다. 즉, 자식이 2개를 초과하지 않으면 이진트리라고 할 수 있다. 포화이진트리 → 모든 레벨에 노드가 꽉 찬 트리 완전이진트리 → 위에서 아래로 왼쪽에서 오른쪽으로 채워진 트리 이진트리는 레벨별로 개수가 보장이 된다는 장점을 가지고 있다. 즉, 레벨에 대한 순번 및 개수가 정해진다는 소리 편의상 배열의 첫번째 요소는 사용하지 않는다. 그래서 배열의 arr[..

자료구조 2023.09.02

자료구조 <Queue> 알고리즘 이해

Queue 롤에서 개인큐라는 말처럼 순서대로 잡아준다는 소리 먼저 탐색하기 시작한 사람부터 먼저 잡아주려는 속성때문에 롤에서 말하는 솔로큐라는 말을 하는 것이다. 선입선출(first-in-first-out)구조이다. 위에서 데이터를 넣었을 때 먼저 넣은 데이터부터 아래로 꺼낼 수 있다. 큐가 실제로 응용되고 있는 대표적인 분야는 은행 번호표이다. 버튼을 누르면 구조에 해당하는 번호가 삽입되고, 순차적으로 먼저 들어간 번호부터 처리되어 창구에서 번호가 호출되게 된다. 뿐만 아니라 수강신청 대기렬도 큐 구조를 활용한 예시로 들 수 있다. 먼저 들어온 데이터를 순차적으로 처리해야 되는 다양한 상황에 활용할 수 있는 것이 ‘큐’ 구조이다. 큐는 들어오는 곳과 나가는 곳이 다르다. 그래서 변수는 두개 필요하다. ..

자료구조 2023.09.02

자료구조 <Stack> 알고리즘 이해

Stack(스택) 스택(stack)은 데이터의 삽입과 삭제가 한쪽 방향에서만 일어나는 구조이다. 다음과 같은 그림은 과자를 넣는 곳과 빼는 곳의 방향이 같아 가장 최근에 들어간 동전이 가장 먼저 나오는데, 스택의 좋은 예라고 할 수 있다. 이와 같은 스택은 가장 나중에 삽입된 데이터가 가장 먼저 삭제되므로 후입 선출(LIFO:List-In First-Out)구조라고도 한다. 스택은 배열을 이용하거나 연결 리스트를 이용해서 구현할 수 있다. 코드 한 줄씩 해석하기 우선 구조체 먼저 선언 결과값 topIndex = -1 이면 아무것도 없다. topIndex = 0 이면 한개 채워졌다. topIndex = 1 이면 두개 채워졌다.

자료구조 2023.08.22

자료구조 <추상화와 구조체>

현실에 존재하거나 존재하지 않는 무언가를 프로그래밍 세계로 객체지향 프로그래밍에서는 모든 것을 프로그래밍화 할 수 있다. 현실에 존재하는 요소는 물론이고 심지어 현실에 존재하지 않는 요소(이를테면 게임 캐릭터라던지…)까지도 구현할 수 있다. 다만, 어떤 요소를 프로그래밍 세계에서 구현하기 위해서는 최대한 대상의 특징을 단순화해야 한다. 즉, 구현할 대상을 프로그래밍적으로 꼭 필요한 부분만 단순화 시키는 것을 추상화라고 한다. ex) 회원가입 - ‘나’임을 알 수 있는 정보만을 입력해 증명 서비스를 제공하는 데 필요한 정보를 받는 것을 추상화라고 한다. 나한테 필요한 정보만을 추출하고 필요없는 것은 무시하는 작업 추상화와 구조체 구조체는 이렇듯 추상화를 통해 프로그래밍적으로 활용해 특정 요소만을 저장하는 ..

자료구조 2023.08.22

자료구조 <메모리 영역>

메모리 영역 작성한 프로그램이 컴퓨터에서 어떻게 동작하는지 이해하려면 메모리 구조에 대해 이해할 필요가 있다. 프로그램이 실행되는 과정을 메모리 구조와 함께 정리한다. RAM RAM은 자유롭게 읽고 쓸 수 있는 기억장치로, RWM(Read Write Memory)라고 부르기도 한다. 또한 RAM에는 현재 사용 중인 프로그램이나 데이터가 저장되어 있다. 시스템의 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리의 특징을 가진다. 일반적으로 주기억장치 or 메모리라고 불린다. 프로그램 실행 순서 프로그램이 실행되는 과정을 도식화하면 다음과 같다. 사용자가 프로그램 실행을 요청하면 프로그램의 정보를 읽어 메모리에 로드(load)되는 과정을 거치고 프로그램이 실행되면 OS는 메모리(RAM)에 공간을 할당..

자료구조 2023.08.22

자료구조 <변수>

변수 프로그래밍에서 변수명이 중요한 이유 프로그래밍에서 변수는 값을 저장하는데 사용되는 식별자 변수는 메모리에 할당 해당 메모리 주소를 가리키는 이름으로 사용 기본적으로 우리가 사용하는 프로그램 데이터는 RAM에 저장된다. 8gb, 16gb, 62gb, 32gb, 64gb등등의 의미를 이해하자 8비트 = 1바이트 그럼 32gb RAM을 가진 컴퓨터라면 이론상 320억개의 바이트를 가지고 있다. 바이트마다 붙는 주소. 다 외울 수 있을까? 우리가 특정 자료를 메모리에 저장할 필요가 있을 때에는 바이트단위로 나눠진 메모리 영역에 저장한다. 즉, 320억개의 바이트를 가진 32gb램은 이론상 1번지~320억번지까지 320억개의 주소가 있다. 그래서 대부분의 언어에서 메모리에 뭔가를 저장할 때에 우리가 주소를 ..

자료구조 2023.08.22

자료구조 <재귀함수> 알고리즘 이해

재귀관계 재귀 = 원래의 자리로 되돌아가거나 되돌아옴. 재귀 호출 = 자기자신을 호출 함수의 재귀적 호출의 이해 함수 스파게티 먹고 싶다() { 면삶기(); 면투척(); ...(); } 면삶기(), 면투척(), ...이걸 한줄로 설정하고 싶을 때 함수를 사용 매크로 단축된 단어로 긴 함수를 불러오는 것 매크로 함수를 이용해 main()함수의 코드를 줄 일수 있다. 재귀함수 그럼, 함수가 함수 자신을 불러오는 것이 재귀함수라는 것을 이해할 수 있을 것이다. but, 재귀함수의 문제점부터 알아보자 우선 구조를 이해해야 한다. 재귀를 사용할 때 탈출조건을 만들어줘야 한다. 재귀함수(탈출 조건 O) if(num

자료구조 2023.08.16

자료구조 <이진탐색> 알고리즘 이해

이진탐색 1. 정렬시켜야 한다. 2. 순차탐색은 배열의 값을 하나하나 비교하지만 이진탐색은 아래 그림과 같이 반으로 나눠서 비교하고 나머지는 버리는 식으로 진행한다. while(1) = 무한반복, 반복횟수(count) = 1 end=2가 되었으므로 다시 위에 코드로 넘어가서 진행한다. searchIdx = 1이 되었고 아래 코드로 진행하면 아래 그림과 같다. 이번에는 start = 2가 되었으므로 다시 위에 코드로 가서 진행한다. searchIdx = 2이므로 arr[searchIdx] = 5가 된다. target과 arr[searchIdx]와 같아지므로 결과값을 출력한다. 다시 한 줄씩 이해하면서 코드를 이해한다. 이 코드의 구성이 어떻게 돌아가는 지도 이해한다. 선형 탐색과 이진 탐색 선형 탐색과 이..

자료구조 2023.08.16