본문 바로가기

분류 전체보기

(433)
AVL Tree(변형 이진탐색트리) AVL Tree 이진탐색트리(BST, Binary Search Tree)의 효율성은 최대한의 높이(height)를 낮추는 것에 있다. 탐색, 삽입, 삭제와 같은 연산 시의 시간복잡도는 O(h)일 만큼 height에 달려있기에 height를 낮추는 것이 이진탐색트리의 효율성을 높이는 방법이 될 수 있다. 그래서 이진탐색트리(이하 BST)의 효율성을 최대로 살리기 위해 height를 낮추는 방법 중 가장 대표적인 방법으로 AVL 트리를 들 수 있다. 초기에 제안되었던 방식으로 G.M. Adelson-Velskii와 E.M. Landis가 자신들의 이름을 따서 AVL Tree로 명하였다. 핵심은 높이를 낮추는 것으로 Balanced Factor(bf, 또는 높이)를 비교하여 좌측 서브트리와 우측 서브트리의 높..
이진탐색트리(Binary Search Tree, BST) 이진탐색트리(BST) 이진탐색트리는 트리의 대표적인 형태로 말 그대로 이진트리 중에서도 탐색에 특화된 트리이다. 탐색에 특화된 이유는 트리 내부 부모노드의 값은 왼쪽 자식노드의 값보다 크고 오른쪽 자식노드의 값보다 작다는 특성을 지니고 있기 때문이다. 그래서 실제 값이 들어있는 이진탐색트리를 살펴보면 아래와 같다. 이 트리를 전위순회방식으로 탐색하면 "1 3 4 6 7 8 10 13 14" 로 값을 오름차순으로 출력할 수 있다. 즉 아까의 특성 때문에 값을 찾기 쉽기 때문에 이진탐색트리라고 한다. 이진탐색트리는 Node와 NodePointer를 통해서 구현할 수 있는데, 아까의 특성을 지키기 위해 아래의 로직으로 구현할 수 있다. 삽입은 삽입하고자 하는 값이 부모노드보다 작으면 왼쪽 자식노드로, 크면 오..
ENFJ + 호구 의 11월(2020.11.24) ENFJ+호구 안쓴지 조금 된듯해서 간만에 다시 써본다. 제목에서 알 수 있듯이, 나는 ENFJ이자 호구이다. MBTI가 참 신기한게 거의 1년째 한두달에 한번씩 해보는데, 늘 같은 결과가 나온다. ENFJ가 맨날 나온다. 처음에 친한 동생이 알려줘서 해보고 ENFJ가 나왔다고 하니 오 딱 나라고 그랬었는데, 처음엔 좋은 건줄 알았다. 좋고 나쁘고 그런건 아니고 그냥 성격인 듯하다. 그리고 남자는 전세계의 0.5% 일만큼 가장 희귀한 유형이라고 한다(희귀하면 뭔가 좋은 것 같아서 자랑해봤다ㅎㅎ;). 그리고 오늘 호구검사가 유행하길래 해봤다. 솔직히 스스로 호구끼가 조금 있어서, 호구 아닌척 검사했는데 어림도 없었다. a++ 흑우 나와서 찾아보니 테스트 응시자 35%가 흑우로 나왔다고 한다. 그래서 조금 ..
점심 메뉴 추천 챗봇(Google Dialogflow 엔진) 2020.05, 혼자 개요 프로젝트와 관련되어 간략한 챗봇 개념 및 기술을 소개하는 자리가 있었다. 소개하며 겸사겸사 여러 엔진의 챗봇을 사용해보며 국내 여러 기술사의 레퍼런스를 많이 봤다. 구글 엔진이 당연히 제일 인기 많을 줄 알았는데 오히려 제일 말이 많았다... 왜 그럴까 하는 생각도 있었고 재밌을 것 같아서 Dialogflow 엔진을 활용해서 챗봇을 만들어봤다. 결론부터 말하자면, Entity가 인식이 잘 안됐다... (ㄴㄴ 같은 걸 자꾸 못알아들어서 힘들었다) 학습을 할 때 밥 > 밤 이런 부분들도 밥을 밤으로 오타친 걸로 인식하고... 그래도 다양한 옵션과 커스터마이징이 가능했고 무엇보다도 특정 Entity를 요구하는 시나리오를 설계하면 되물어서 특정 Entity를 알아내오도록 하는 부분은 ..
교내 스터디룸 예약 시스템 2019.12~2020.04, with 팀원 1명 개요 모교 단과대학 건물에는 스터디룸이 있다. 학생회에서 스터디룸을 관리하고 있는데, 이를 스터디룸 앞에 종이를 통해 예약을 받고 관리가 이루어진다. 그래서 여러가지 문제점이 있었다. 매주 예약을 받는 종이를 갈아줘야함. 자기가 예약한 시간을 확인하기 어려움. 실제로 예약한 시간만큼 사용하지 않아 남는 시간에 다른 사용자가 이용을 못함(추후 추가됨) 그래서 이를 전산화해서 웹으로 관리할 수 있도록 구축하고자 했다. 구축 요구사항 명세 크게 3가지의 기능이 필요했다. 정리하면 다음과 같다. 1. 회원가입 및 로그인 학교 웹메일 인증을 통해 회원가입 로그인은 학번/비밀번호 통해 입력 2. 예약 예약가능 스터디룸은 1층 2개, 3층 1개 예약 시 예약 가능한 ..
로그 추적 시스템(연구과제) 2020.06 ~ 2020.12 개요 로그 추적시스템과 관련된 연구 내용이었다. 연구내용이다보니 많은 것들을 공개할 수 없어서, 내가 작성했던 문서 위주로 간략하게만 소개할 수 있을 듯하다. 로그 분석은 시스템 문제 해결의 중요한 방법이다. 그러나 최근 분산 컴퓨팅, 시스템 고도화 등의 여러 환경 속에서 시스템의 구조가 복합적으로 변해가고 있다. 그 결과, 하나의 시스템 내부에서도 수많은 로그 파일들을 생성하고 작성한다. 이러한 복합적인 시스템 구조 속에서 문제 발생 시 연쇄적으로 영향을 미치므로 여러 로그들 중에서 단순 하나의 프로그램에 대한 로그 분석만으로 문제 해결은 쉽지 않은 실정이다. 이에 따라 로그 추적 시스템을 통해 여러 로그들 중에서 시스템 문제 해결에 필요한 로그를 추려내 제공하고자 한다..
학교 웹 동아리 홈페이지 2019.01~2019.02, with 팀원 2명 개요 학교에 멋쟁이 사자처럼 웹 프로그래밍 동아리를 홍보해야 했다. 웹 프로그래밍 동아리답게 웹 페이지는 있어야 한다고 다들 생각했고, 조금 잘 만들어보자는 의미에서 많이 고민하고 시간 투자도 많이 했었던 것 같다. 기능이랄건 크게 없었는데 다음의 기능은 꼭 필요했다. 질문/답글 형태의 게시글 사진과 함께 여러 소식을 전할 게시글 웹 동아리답게 예쁜 디자인 구축 기술 스택 백엔드(Python Django 프레임워크) : 윤신O, 이산O 프론트엔드(html, css, javascript) : 김민O 데이터베이스(SQLite, PostgreSQL) 그 외 pillow(django 이미지 처리), ckeditor(WYSIWYG 에디터), Heroku(배포) 나..
어린이집 안전 종합 플랫폼 2018.09~2018.11, with 팀원 5명 개요 2018 공개 SW 개발자 대회 및 네이버 D2 해커톤 대회에 출품했던 프로젝트이다. 공공데이터 API를 활용해서 보다 안전한 어린이집이 될 수 있게 다양한 정보를 제공하는 플랫폼을 개발하고자 했다. 포함한 기능은 크게 2 가지이다. 어린이 집 주변 시설현황(유흥주점 수, 흡연구역 등) 스쿨버스 승하차 태그 확인 이를 웹, 카카오톡 챗봇 두 가지 형태로 서비스를 제공하도록 하였다. 구현 해당 프로젝트는 생각보다 규모가 꽤 컸다. 그래서 역할을 나누고 진행하였다. 백엔드(Ruby On Rails, JavaScript) : 유재O, 윤신O, 이산O 프론트엔드(HTML, CSS, JavaScript) : 김지O, 홍연O, 김민O RFID리더기(라즈베리파이..