본문 바로가기

Computer Science/자료구조&알고리즘12

[정렬] (번역) 정렬 알고리즘에서 안정성(Stability)이란? 이 포스팅은 아래 글을 번역 및 요약한 것입니다. Stability in sorting algorithms - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. www.geeksforgeeks.org 정렬 알고리즘에서 말하는 안정성(stability)란 키-값 쌍을 가진 객체들 중 같은 키를 가진 객체들의 순서가 정렬 이후에도 유지되는 것을 말합니다. 위 .. 2021. 2. 15.
중간값을 구하는 안전한 방법 보통 중간값을 다음과 같이 나타내는 경우가 많은데, int mid = (start + end) / 2; 이건 별로 좋은 방법이 아니다. 작은 수에서는 문제가 일어나지 않지만 start + end가 정수 표현 범위(-2,147,483,647 ~ 2,147,483,647)를 넘어서는 경우 오버플로우가 일어나기 때문에 원하는 값을 얻을 수 없다. public class Main { public static void main(String[] args) { int start = 1_500_000_000; int end = 1_600_000_000; int mid = (start + end) / 2; System.out.println("mid = " + mid); } } 실행 결과 mid = -597483648 따.. 2021. 2. 15.
[자료구조] 단일연결리스트 reverse 메서드 구현 (java) 단일연결리스트의 reverse 메서드를 구현해봅시다. 단일연결리스트의 객체는 head 정보, 그리고 노드는 다음 노드 정보만 가지고 있는 가장 단순한 형태의 단일연결리스트입니다. 코드로 표현하면 다음과 같습니다. public class SinglyLinkedList { Node head; static class Node { int data; Node next; } } 코드를 복잡하게 만들지 않기 위해서 toString()이나 add() 메서드는 이미 구현되어 있다고 가정하겠습니다. public class UnitTest { public static void main(String[] args) { SinglyLinkedList list = new SinglyLinkedList(); list.addLast(.. 2020. 11. 13.
[자료구조] 파이썬으로 단일연결리스트 구현하기 단일연결리스트 동적 배열의 단점 동적 배열은 연속된 메모리 공간에 값을 할당한다. 파이썬의 리스트는 값을 직접 저장하지 않고 해당하는 객체의 주소를 저장하는 레퍼런스 배열이기 때문에 다른 언어의 배열과는 약간 다르다. 동적 배열은 먼저 크기를 할당해 메모리 공간을 미리 확보해놓고 이후에 값을 저장하기 때문에 대부분의 경우 저장하는 요소의 수가 배열의 길이보다 작다. append 연산은 분할 분석 방식으로는 O(1) 의 시간복잡도를 가지지만 실제로는 배열이 가득 찼을 때 resize 연산을 하면서 O(n) 의 시간복잡도를 가진다. 즉 특정 시점(배열이 가득 찼을 때)에 연산 속도가 갑자기 느려진다. 이는 실시간 시스템에서는 문제를 유발할 수 있다. 동적 배열의 단점을 정리하면 아래와 같다. 동적 배열의 길.. 2020. 11. 8.
[자료구조] 파이썬으로 큐(Queue) 구현하기 큐(Queue) 큐는 한쪽 끝에서 자료를 추가하고 한쪽 끝에서 자료를 꺼내는 선형 자료 구조로 가장 먼저 들어온 자료가 가장 먼저 나가는 FIFO(First In First Out) 방식입니다. 롤에서 랭크 게임을 매칭할 때 "큐를 돌린다"라고 표현하죠. 게임 시작 버튼을 먼저 누른 사람이 먼저 게임을 할 수 있도록 처리해줍니다. 큐는 이처럼 요청이 들어온 순서대로 일을 처리할 때 사용합니다. 큐의 동작 방식 큐가 동작하는 방식을 알아봅시다. 크기가 5인 큐를 만듭니다. Queue = [None, None, None, None, None] 우선 큐는 가장 먼저 들어온 데이터를 가리키는 front 변수와 가장 나중에 들어온 데이터의 위치를 가리키는 back 변수가 필요합니다. 처음에는 큐가 비어있으므로 f.. 2020. 11. 6.
[자료구조] 파이썬으로 스택(Stack) 구현하기 스택(Stack) 스택은 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 선형 자료구조입니다. 가장 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In First Out)방식을 사용합니다. 웹브라우저의 뒤로가기나 편집기의 되돌리기(undo) 기능이 이런 방식을 이용합니다. 사실 파이썬의 리스트는 스택이 가져야할 메서드를 이미 가지고 있습니다. 따라서 스택 자료형을 따로 만들 필요는 없습니다. 하지만 그냥 공부한다는 생각으로 간단하게 스택 자료형을 만들어봅시다. 기본적으로 아래의 네 가지 연산이 필요합니다. S.push(e): Top에 새로운 요소를 추가 S.pop(): Top 요소를 반환하면서 제거 S.top(): Top 요소를 제거하지 않고 반환 S.is_empty(): 스택이 비어있으면 Tru.. 2020. 11. 6.