본문 바로가기

성장하는 중 입니다?

(6)
JAVA 로 자료구조 구현하기 - 1.기초 JAVA 로 코딩테스트 문제를 풀면서 알고리즘을 공부하고 있다. 알고리즘을 공부하는게 단순 문제를 풀면 된다고 생각했지만, 언제 연결리스트를 써야할 지, 언제 배열을 쓰는게 더 효율적인지, 그리고 시간/공간 복잡도를 고려한다면 어떻게 최적화 할 수 있는지 알 수 없었다. 지금까지 거의 단순구조만을 이용해 if 문, for 문을 남발하며 문제를 풀었는데, 이것은 좋은 알고리즘이 아닌 것 같다. 좋은 알고리즘이란 무엇일까? 우선, 자료구조를 직접 구현하며 각각에 대한 이해도를 키워야 할 것 같다. 지난 열혈자료구조 글에서 추상자료형 (Abstract Data Type) 가 무엇인지 지갑과 지갑의 기능을 들어 설명했었는데, 기억이 사라져 다시 글을 보고 왔다. typedef 지갑 {} 으로써 단순 C 언어적 ..
자바 내장 옵저버 패턴 이 포스트는 한빛미디어 'HeadFirst - Design Pattern' 을 공부하면서 작성되었습니다. 이전 포스트에서 구현했던 Subject 인터페이스 대신, Observable 클래스를 통해 옵저버 패턴을 구현할 수 있다. java.util.Observer, java.util.Observable 을 이용하면 된다. Class Observable Class WeatherData : Observable 를 확장한 Class (Observable Object) addObserver() deleteObserver() notifyObserver() setChanged() getTemperature() getHumidity() getPressure() Interface Observer GeneralDispla..
옵저버 패턴 이 포스트는 한빛미디어 'HeadFirst - Design Pattern' 를 공부하면서 작성되었습니다. ! 결합을 느슨하게 하기 두 객체가 느슨하게 연결되어 있으면, 상호작용은 할 수 있으나 서로에 대해 아는 것은 아주 적다. 옵저버 패턴은 subject 와 observer들이 느슨하게 결합된 객체 디자인을 제공한다. ? 왜 subject 가 observer 에 대해 아는 유일한 것은 observer 가 어떤 observer interface 를 구현한다는 사실 뿐이다. observer 의 concrete class 를 알 필요도 없고, 그게 뭐하는 건지 등등 알 필요가 없다. 언제든지 새로운 observer 를 추가할 수 있다. subject 가 연연하는 것은 observer interface 를 구..
"pointer being freed was not allocated"의 늪에 빠졌습니다. 이 포스트는 "윤성우의 열혈 자료구조"를 공부하면서 작성되었습니다. 우선 나는 macOS Big Sur 11.4 에서 Xcode 사용 중이다. Ch03. 연결 리스트의 문제 03-2. NameCard 를 구현하던 중 free() 에서 에러를 만났다. 그리고 며칠동안 이 "pointer being freed was not allocated" 에러에서 빠져나오지 못했다. 처음에는 macOS 에서는 동적할당 하는데 다른점이 있다거나, 메모리가 자동으로 해제된다거나 하는 줄 알았다. 그래서 free() 부분을 지우고, 5. 남아있는 모든 사람의 전화번호 정보를 출력한다. 단계로 넘어갔는데 EXC_BAD_ACCESS 가 뜨면서 빌드에 실패하는 것이다. 이것은 해제된 개체에 액세스 (자동 해제된 객체를 액세스하는 ..
열혈자료구조 - 3.2 배열을 이용한 리스트의 구현 이전 포스트에서 추상 자료형 (ADT) 이란 무엇인지 알아보았는데, 이제 리스트 자료구조의 ADT 를 구현할 것이다. 리스트는 구현방법의 차이에 따라서 순차 리스트와 열결 리스트로 나뉜다. 순차 리스트 - 배열을 기반으로 구현된 리스트 연결 리스트 - 메모리의 동적 할당을 기반으로 구현된 리스트 두 리스트의 ADT는 같을 수도 있고 다를 수도 있다. 리스트 자료구조는 데이터를 나란히 저장하며, 중복된 데이터의 저장을 막지 않는다. 우선, 리스트의 ADT를 기반으로 만들어진 main함수를 보면 리스트의 기능들을 빠르게 이해할 수 있을 것 같다. #include #include "ArrayList.h" int main(void) { // ArrayList의 생성 및 초기화 List list; int data..
열혈자료구조 - 3.1 추상 자료형 (Abstract Data Type) * 이 포스트는 도서 '윤성우의 열혈 자료구조' 를 기반으로 작성되었다. 챕터3 - '연결리스트' 부터 포스트를 작성했는데, 챕터3 부터 진정한 자료구조 이야기가 시작되는 느낌이기 때문이다. (챕터1, 2은 자료구조에 대한 간략한 개념 설명과 알고리즘과의 연관성, 재귀함수에 대한 내용) 지갑에 대한 추상 자료형 = 지갑의 기능을 나열한 것 : 카드의 삽입 카드의 추출 동전의 삽입 동전의 추출 지폐의 삽입 지폐의 추출 (추상 자료형은 기능의 나열일 뿐, 어떤 절차를 거쳐 기능을 하는 지는 언급하지 않는다. ) 지갑의 구조체를 정의하고, 100원짜리 동전의 수와 5000원짜리 지폐의 수를 정의했다. typedef struct _wallet { int coin100Num; int bill5000Num; } W..