본문 바로가기

분류 전체보기96

Heap 힙 자료구조 ㅎ..제가 말이죠.. 요즘 Swift로 알고리즘을 풀어보려고 연습중인데, 거의 없는게 없는 Java로 알고리즘 문제를 풀다가 Swift로 풀려고 하니 없는게 너어무 많더라구요??? Stack도 Queue도 PriorityQueue도?!? 구글링 해보니 직접구현해야하는 거 같더라구요??ㅋㅋㅋㅋㅋ 예. 근데 이것도 사실 이 게시물 작성했을 당시에 iOS / Swift 공부를 한지 겨우 2개월밖에 안됐을 때라 그랬나봐용.. stack 은 그냥 배열에서 removeLast( ) 사용해서 stack처럼 사용하면 되구.. queue는 그냥 배열에서 removeFirst( ), removeLast( ) 사용해서 queue처럼 사용하면 되구.. PriorityQueue도 .sorted(by: { Bool }) 이런식으.. 2021. 2. 17.
Insertion Sort (삽입 정렬) Insertion Sort (삽입 정렬)은 이름 그대로 적절한 위치에 삽입을 하여 정렬을 하는 알고리즘입니다. 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 하나씩 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성합니다. 요소를 하나씩 비교해나가기 때문에 시간 복잡도는 O(n^2)를 가집니다. 알고리즘 구현 순서는 다음과 같습니다. 비교는 배열의 두 번째 인덱스부터 시작하여 자신의 앞쪽에 있는 요소들과 비교합니다. 비교했을 때, 앞의 요소가 자신보다 크다면 swap 합니다. 비교했을 때, 앞의 요소가 자신보다 작다면 비교를 멈춥니다. 다음 인덱스의 요소부터 다시 2~4를 반복합니다. 아래는 Swift로 구현한 Insertion Sort 입니다. var arr: [Int] = [5,2,4,1.. 2021. 2. 15.
Quick Sort (퀵 소트) Quick Sort는 전형적인 분할 정복(divide and conquer) 알고리즘의 하나입니다. 이름만큼 평균적으로 매우 빠른 수행 속도를 자랑하며 시간복잡도 O(n log n)을 가지고, 추가 메모리 공간을 필요로 하지 않기 때문에 O(log n)만큼의 메모리를 필요로 합니다. Merge Sort와 달리 Quick Sort는 비균등 분할을 합니다. 리스트 안에 있는 한 요소를 선택하는데, 이때 이 원소를 pivot이라 합니다. 입력 배열을 pivot을 기준으로 비균등하게 2개의 부분 배열로 분할합니다. 이 때, pivot의 왼쪽은 pivot보다 작은 요소들로, pivot의 오른쪽은 pivot보다 큰 요소로 이루어지게 됩니다. (divide) 이렇게 분할한 부분 배열을 정렬합니다. 부분 배열의 크기가.. 2021. 2. 12.
Merge Sort (병합 정렬) Merge Sort는 전형적인 분할 정복(divide and conquer) 알고리즘의 하나입니다. 시간복잡도 O(n^2)을 가지는 일반적인 정렬과 달리 Merge Sort의 시간 복잡도는 O(nlog_2 n) 이 됩니다. 이등분씩 나누는 것을 반복해서 최소 단위까지 분할합니다. (divide) 분할한 부분 리스트를 정렬합니다. (conquer) 정렬된 부분 리스트들을 하나의 리스트에 병합합니다. (combine) 다음은 swift 언어로 구현한 divide, merge 메서드 입니다. func divide(_ start: Int,_ end: Int) { if start >= end { return } let mid = (start + end) / 2 divide(start, mid) divide(mid.. 2021. 2. 11.
YAPP 18th 활동 시작 대학생 기업형 연합 IT 동아리 YAPP YAPP은 대학생들의 다양한 아이디어와 열정, 그리고 가능성을 바탕으로 조그마한 변화일지라도 의미가 있는 일을 해나가고, 기존에 없던 새로운 가치를 만들기 위해 노력하는 대학생 기업형 IT동 yapp.co.kr 2020년 8월~12월동안 YAPP 17기로 활동한 이후, 원래부터 하고싶었던 iOS개발을 12월 말부터 공부하기 시작했습니다. 벌써 졸업인 데다가, 취업을 준비해야하는 시기에 이제 막 iOS 공부를 시작한다는게 늦은 건 아닐까 생각하다가도.. 나중에 분야를 바꾸는 것보다는 빠르겠지 하는 생각이 들었어요. 그리고 이렇게 계속 미련가지고 있을 바에는 지금이라도 시작해보는게 늦지 않을 것 같다는 생각이 들었습니다😂 저는 2020년 12월 말에 부스트코스를 통해.. 2021. 2. 10.
OSI 7계층이 뭐지?? 오늘은 네트워크 공부에서 빠질 수 없는 OSI 7계층에 대해서 알아보려 합니다. 솔직히 OSI 7계층에 뭐가 있는지, 각 계층의 역할이 뭔지 그냥 단순히 암기하기에는 내용이 많기도 해서 암기한답시고 단순하게 공부해놓으면 나중에 헷갈릴 때가 많습니다. 그리고 저는 단순암기보다 이해를 해야 기억에 더 잘 남는 편이라.. 이번에는 동작방식을 하나씩 따라가보며 이해해보려고 합니다...😄 먼저, OSI 7계층이 뭘까요?? 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말합니다. 도대체 왜 나눴을까요? 우리의 공부량을 더 늘이기 위해서는 아니겠죠? 이렇게 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있도록 하기 위함입니다. 7단계 중 특정단계에서 이상이 생기면 다른 단계의 장비 및 소프트.. 2021. 2. 7.
RESTful API란? 안드로이드/iOS 개발을 하면서 API 통신을 할 때 보는 것이 RESTful API였는데요, 평소 RESTful API가 무엇인지 두루뭉실하게만 알고 있어서 누군가 물어본다면 얼버무리게 되어 한 번쯤은 날 잡고 정리를 해보고 싶었습니다. RESTful API가 뭔지 설명하기까지 우리가 알아야 할 건 REST가 무엇인지, REST가 가진 원칙이 무엇인지, 그래서 RESTful API가 무엇인지, 어떤 규칙이 있는지, 응답상태코드는 어떤게 있는지 등을 알아야 할 것 같습니다. 그럼 시작해볼까요? REST란? REST는 Representational State Transfer의 줄임말입니다. 그냥 직역하면 대표적인 상태 전송이 되네요? 이게 무슨 말일까요? REST는 자원을 이름(자원의 표현)으로 구분하여 .. 2021. 1. 28.
Ch9. Combining Operators 본 게시물은 Florent Pillet, Junior Bontognali, Marin Todorov, Scott Gardner - RxSwift. Reactive Programming with Swift (2017, Razeware LLC) 책과 ReactiveX 사이트를 기반으로 작성되었습니다. RxSwift를 공부하는 데에 이 책을 읽으면 좋겠다고 생각하였고, 단지 읽기만 하는 것보다 한국어로 직접 정리해놓으면 더 기억하기 좋을 것 같아 게시물을 작성하게 되었습니다. 이번 게시물에서는 마블 다이어그램과, 마블 다이어그램에 해당하는 메서드 예시를 중점으로 정리하였습니다. 이전 Chapter에서는 Observable Sequence를 어떻게 만들고, 필터링하고, 변형하는지를 보았습니다. 이번 챕터에서는 .. 2021. 1. 13.
TCP 동작 방식 (3-way handshake, 4-way handshake) 웹 서비스 동작 방식을 보면, 사용자가 url을 입력하면 도메인 주소를 이용하여 DNS에서 IP 주소를 얻어오고, 그렇게 얻어온 IP 주소를 웹 데이터 형식으로 변하여 TCP 통신을 통해 웹 서버와 주고받게 됩니다. 이때 TCP 통신을 하기 위해 3-way handshake로 접속을, 4-way handshake로 접속 해제를 해주는 데요. 오늘은 TCP 동작 방식을 알아보기 위해 3-way, 4-way handshake 과정을 알아보겠습니다. Socket 생성 Client는 운영체제에 socket( ) 시스템 콜을 이용하여 소켓을 생성합니다. 운영체제는 소켓의 정보를 저장하기 위해 메모리 영역을 할당하고, 소켓 정보를 저장합니다. 3-way handshake Client는 Server와 연결하기 위해 .. 2021. 1. 8.
Data Binding in MVVM on iOS 본 게시물은 Data Binding in MVVM on iOS 라는 Medium 게시물을 기반으로 작성하였습니다. 다소 흥미로웠던 내용이라 제 블로그에 메모 및 정리해놓으면 좋을 것 같아 작성을 하게되었습니다. 영어로 된 본문을 제가 읽히는대로 번역을 해서 의역이 많고, 최대한 적절한 단어선택을 하긴 했으나 그래도 이해가 가지 않거나 잘못된 내용이 있다면 댓글로 알려주세요! 바로 수정하겠습니다 :) > Technique1. Observables > Technique2. Event Bus / Notification Center > Technique3. FRP Technique (RxCocoa / RxSwift) > Technique4. Combine 우리는 새로운 프로젝트를 할수록 View Controll.. 2021. 1. 7.
Web의 동작원리 이제는 생활에서 빼놓을 수 없는 인터넷. 하지만 정작 웹 사이트가 어떻게 동작하는지 아시나요? 그래서 오늘은 웹 URL을 입력하는 것부터 해당하는 웹 사이트가 나에게 보여질 때까지 어떤 과정이 일어나는지 알아보았습니다. (1), (2) 사용자가 웹 브라우저를 통해 찾고 싶은 웹 페이지의 URL 주소를 입력합니다. (3) 사용자가 입력한 URL 주소 중에서 도메인 네임 부분을 DNS 서버에서 검색합니다. 도메인 네임이란, 웹 사이트의 주소를 찾기 위한 고유한 문자형 주소체계입니다. 원래 컴퓨터나 통신장비 간 통신에 최적화된 주소체계는 IP 주소지만, IP 주소는 숫자로 이루어져 있어서 사람이 기억하기 어렵기 때문에 도메인을 사용합니다. (4) DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 .. 2021. 1. 4.
D&D(DND) 4th 활동 시작 DND 프로젝트에 즐거움을, 모두에게 기회를 dnd.ac iOS를 처음 공부하기 시작한지 3일이 되던 날, IT 연합 동아리 D&D에 iOS 개발자로 지원하게 되었습니다. 그만큼 iOS와 관련해서 내세울 것도 없었고, 내가 보여줄 수 있는 건 지금까지 했던 안드로이드 활동과 블로깅 활동 뿐이라서 사실 기대는 크게 하지 않았어요. 하지만 어떻게 된 일인지 200명 중 40명 안에 제가 들게 되었고, 활동을 하면서 느낀건 DND는 정말 초보 개발자들도 잠재력과 열정만 있다면 선발해서 프로젝트를 할 수 있게끔 해주는 동아리인 것 같았어요. + (3/15) 참고로 DND는 아직 신생동아리에 속해서 면접 없이 서류만 봅니다. 하지만 동아리가 생긴지 얼마 안된 것에 비해 정말 훌륭한 분들이 멘토로 계십니다. 다만,.. 2021. 1. 3.