본문 바로가기

Study/Algorithm 이론

(5)
메모리의 구조 프로그램이 실행되기 위해서는 우선 프로그램이 메모리에 로드 되어야 한다. 뿐만 아니라 프로그램에 선언된 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터에 설치된 OS(운영체제)는 프로그램의 실행을 위해 다양한 메모리를 제공하고 있으며, 운영체제로부터 프로그램이 할당받는 메모리는 크게 네가지로 구분한다. 1) 코드 영역 2) 데이터 영역 3) 스택 영역 4) 힙 영역 코드(Code) 영역 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역이다. 텍스트(code) 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 개발자가 작성하는 코드라고 생각하면 쉽다. 함수나 제어문, 상수 등이 이에 포함될 수 있다. 데이터(Data) 영역 데이터 영역은 전역변수와 정적(s..
배열에서의 정렬 1. 배열에서의 정렬 배열은 CRUD를 할 때 가장 기본적으로 사용하며, 생성 당시에 크기가 결정된다. 크기에 따라 인덱스(참조)가 0부터 n까지 부여되며, 이에 따라 인덱스를 통해 값을 조회할 수 있다. 그렇지만 리스트와 다르게 크기를 유동적으로 변경할 수 없다. 1-1. Arrays.sort로 오름차순으로 정렬하기 오름차순으로 정렬하기 위해서는 보통 Arrays라는 클래스 내부의 sort 메소드를 사용한다. import java.util.Arrays; public class Main { public static void main(String[] args) { int numArr = { 5, 1, 4, 2, 6, 3 }; Arrays.sort(numArr); // 오름차순으로 정렬 System.out...
[자료구조] 해시 테이블(Hash Table) 해시 테이블(Hash Table / Hash Map) 🔍 개념 해시 테이블은 대량의 정보를 저장하고 특정한 요소를 효율적으로 검색할 수 있는 데이터 구조이다. 다소 복잡하다. 해시 테이블의 구조는 테이블 내에 내부적으로 더 작은 sub-group인 "버킷"에 key-value 구조의 쌍을 저장해둔다. 키를 저장할 때 메모리의 공간을 덜 차지할 수 있도록 해시 함수를 통해 키값을 해시라는 특정한 숫자 값으로 변환해준다. 해시 테이블은 메모리 확장이 필요한 경우에만 메모리 크기를 늘리고, 가능하면 최소 크기를 유지한다. 검색 시 key를 사용해서 원하는 value를 가져올 수 있다. 이는 두개의 값이 하나의 쌍이기 때문에 가능한 것이다. 검색된 key는 사전에 정의된 해시함수를 통해 해시값을 반환받고 해당 ..
[자료구조] 배열(Array)과 연결 리스트(Linked List) 📌 배열 🔍 배열(Array)이란? 배열은 CRUD를 할 때 가장 기본적으로 사용되는 자료구조이다. 생성할 때 크기가 결정되고 각 자리에 대해 인덱스 번호가 부여된다. 인덱스 번호를 통해 배열 내부에 있는 요소들에 접근할 수 있다. 위와 같이 배열의 주소를 나타내는 인덱스(index)와 요소(elements)로 구성되어 있다. 배열의 장점 배열은 필요에 따라 바로 생성하여 사용하기 용이하다. int[] numArr = { 1, 2, 3, 4, 5 };와 같이 배열은 바로 생성할 수 있다는게 최고 장점이다. 그리고 배열이 응용되어 스택이나 큐 같은것들이 존재한다고 볼 수 있기 때문에 배열은 어떤 자료구조의 기초가 될 수 있다. 또한 원하는 데이터에 대해 CRUD를 쉽게 처리할 수 있으며 정렬하기에 용이하다..
[자료구조] 스택(Stack)과 큐(Queue) 스택(Stack)이란? 🔍 개념 스택이란 쌓아 올린다는 의미로 책을 쌓는 것처럼 차곡차곡 쌓아 올리는 자료 구조를 말한다. 🔍 스택의 특징 스택은 Last In First Out (후입선출) 방식으로 가장 마지막에 들어간 자료가 가장 먼저 삭제된다. 위의 이미지처럼 구조와 크기가 같은 자료를 정해진 방향으로만 쌓을 수 있으며, top으로 정한 곳을 통해서만 접근이 가능하다. 삽입될 새 자료는 top이 가리키고 있는 자료의 위에만 쌓인다. 뿐만 아니라 삭제할 때도 top을 통해서만 삭제할 수 있다. 📍 스택에 자료 추가, 제거 삽입, 삭제 연산은 다음과 같다. import java.util.Stack; public class Main { public static void main(String[] args)..