본문 바로가기

분류 전체보기338

네트워크 기초 정리 노트 네트워크: 노드들이 연결된 통신망 *노드: 네트워크에 속한 장비 인터넷: 세상에서 가장 큰 네트워크 (이 통신망을 통해서 웹서비스가 되는데 world wide web) 인터넷 != www 크기에 따른 분류 LAN (Local Area Network) : 지역끼리 묶은 통신망 WAN (Wide Area Network) : 멀리있는 지역, 여러개의 LAN을 연결시킨것 MAN (Metropolitan Area Network) 형태에 따른 분류 Star: 중앙에 모든 장비가 연결됨 (가운데 장비 고장나면 통신 안됨, 집 공유기, LAN 대역 구성할때 자주 사용 Mesh: 그물 형태 Ring Bus 혼합: 실제 인터넷 형태 통신 연결에 따른 분류 유니캐스트 : 1:1 통신 멀티캐스트: 1:N 통신 브로드캐스트: .. 2021. 1. 24.
다익스트라 알고리즘 최단경로 찾기 문제 우선순위 큐를 이용한다. Swift에서 우선순위큐는 직접 만들어야 한다. min Heap 으로 만들면 최적이지만 구현의 편리함을 위해 이번 코드에서는 배열로 sort 해서 removeLast로 min값을 찾아 처리한다. //dijkstra var graph : [String: [(String,Int)]] = [:] graph.updateValue([("B",8),("C",1),("D",2)], forKey: "A") graph.updateValue([], forKey: "B") graph.updateValue([("B",5),("D",2)], forKey: "C") graph.updateValue([("E",3),("F",5)], forKey: "D") graph.updateValue.. 2021. 1. 21.
탐욕 알고리즘과 예제문제 (Swift) Greedy algorithm 최적의 해에 가까운 값을 구하기 위해 사용 여러 경우 중 하나를 결정해야 할 때 마다, 매 순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행해서 최종적인 값을 구하는 방식 동적 계획법(DP)과 비교 길을 찾을때 동적계획법: 모든 경우의 길을 전부 확인하고 최단 경로를 찾아서 출발 탐욕법: 일단 출발하고 갈림길에 따라 최적의 경로로 생각되는 길을 선택 [출처 및 자세한 내용] 동적 계획법(Dynamic Programming)과 탐욕법(Greedy Algorithm) 0x1X28uI-8A6oGM7.jpeg가장 빨리 가는 길을 찾고 싶다. 한 가지 방법은 출발하기 전, 가는 거리와 신호등, 교통 상황 등을 전부 계산해서 최적의 길을 찾는 것이다. 머리가 깨질 듯이 전부 확인.. 2021. 1. 20.
Graph Swift (BFS, DFS) Graph 표현 Dictionary + Array var graph : [String: [String]] = [:] graph.updateValue(["B","C"], forKey: "A") graph.updateValue(["A","D"], forKey: "B") graph.updateValue(["A","G","H","I"], forKey: "C") graph.updateValue(["D","B","E","F"], forKey: "D") graph.updateValue(["E","D"], forKey: "E") graph.updateValue(["F","D"], forKey: "F") graph.updateValue(["G","C"], forKey: "G") graph.updateValue(["H",.. 2021. 1. 20.
이진탐색 Binary Search - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 탐색 알고리즘 순차탐색 해시구조 BST 이진탐색 class Solution { func search(_ nums: [Int], _ target: Int) -> Int { var head = 0 var tail = nums.count-1 while head 2021. 1. 19.
Traversing Tree (recursive, iterative) Tree traverse 할때 iterative 하게 하려면 Stack 사용 level traverse 의 경우 Queue 사용 Binary Tree 일 경우 node nil 로 loop 가능 N-ary Tree Preorder Traversal - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com /** * Definition for a Node. * public class Node { * public var val: Int * public var children.. 2021. 1. 18.
Swift Heap Heap 여러개의 값들 중에서 가장 큰 값이나 가장 작은 값을 빠르게 찾아내도록 만들어진 자료구조 완전 이진 트리 (이진 탐색 트리와 다름) 중복허용 트리 좌측부터 node 추가됨 삽입 완전 이진트리 만족하게 배열의 맨 마지막에 삽입 부모노드와 비교하며 한칸씩 올림 삭제 heap 에서는 root를 삭제함 (우선순위큐) root 삭제 제일 작은 값 (배열끝값) 을 root로 옮김 child node 와 비교 (둘다 클 경우 둘 중 큰값과 swap) code import Foundation var heap : [Int] = [] //본인 index i 일때 //parent index: i/2 //left child index: 2*i //right child index: 2*i+1 heap.append(-1.. 2021. 1. 18.
이진트리 연산 Maximum Depth of Binary Tree - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com node count leaf node node height /** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public var right: TreeNode? * public init() { self.. 2021. 1. 16.
이진트리 순회 Range Sum of BST - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 전위 순회 부모노드를 먼저 처리한 후에 자식노드를 처리해야 할때 후위 순회 자식노드를 먼저 처리한 후에 부모노드를 처리해야 할때 (ex, 디렉토리 용량 계산) /** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public.. 2021. 1. 16.
Swift Sorting Algorithm Note 1. 선택 정렬 정렬되지 않은 맨 앞에서 부터 이를 포함한 그 이후의 배열값 중 가장 작은 값을 찾는다. 가장 작은 값을 찾으면 그 값을 현재 인덱스와 바꿔준다. 다음 인덱스에서 위 과정을 반복한다. 시간 복잡도: O(n^2) 공간 복잡도: O(n) 5 2 3 1 1 5 2 3 1 2 5 3 1 2 3 5 class Solution { func sortArray(_ nums: [Int]) -> [Int] { var nums = nums for i in 0.. [Int] { var nums = nums var tmp = 0 for i in 0.. swap // let tmp = nums[i] // nums[i] = nums[j] // nums[j] = tmp // } } tmp = nums[minIndex.. 2021. 1. 13.
2020 회고 2020년은 네이버 인턴기간 뿐만 아니라 업무 외적으로도 많이 성장할 수 있는 한 해였다. 올 한해 굵직한 일들을 시간 순으로 정리해보았다. 스타트업에서 작업한 플리포스 앱 출시 네이버 AI 버닝데이 해커톤 2등 쿠알라룸푸르 여행 부산대 DSC 코어멤버 활동 (iOS 세션 진행) 수료링크 개발 블로그 시작 (300여개 글 작성) (블로그링크)[https://haningya.tistory.com/] 외식예약 외주앱 출시 4학년 1학기 23학점 수강 (평점 3.9) 구글 클라우드 플랫폼 Core Infrastructure 강의 수료 한화 드림인 아카데미 선발 및 우수팀 수료 (100:1 경쟁률) 후기 학부 졸업과제 완료 드림인 팀프로젝트 아이패드 로토스코핑 앱 출시 소개페이지 사이드 프로젝트 교내 해커톤 우.. 2021. 1. 1.
토익후기 중학교 3학년때 쳤던 토익인데 유효기간이 다되어 졸업기준 때문에 다시 치게 되었다. 여전히 나에게 뭘 잘해요? 물어보면 개발 보단 영어를 잘한다고 말하는 것 같다.. 영어말고 컴퓨팅 사고 조기교육을 받았어야 했다. 2020. 12. 28.
👨‍🎓 드림인 프로젝트 수료 및 앱 출시! 오늘은 드림인 아카데미 교육과정 수료식이 열리는 날이다. 처음 드림인을 지원해 합격한 뒤 짧지 않은 시간동안 매주 평일에는 온라인 강의를 듣고 과제를 하고, 토. 일요일에는 2시간씩 실시간 강의를 들어야 했다. 한화 Dreamin iOS Academy 최종합격 후기 Connect your Dream > dreamin | 드림인" data-og-description="dreamin iOS Academy" data-og-host="dreamin.career" data-og-source-url="https://dreamin.career/academy/ios" data-og-url="https://dreamin.c.. haningya.tistory.com iOS 개발 경험이 있었기에 어려운 일정은 아니였지만 처.. 2020. 11. 28.
MS-Power Apps 예시앱 (excel 을 DB로 쓴다고?) 간단한 파워앱스 샘플앱을 만들어 본다. Exercise - Create your first app in Power Apps - Learn Learn how to build your first app in Power Apps. docs.microsoft.com 특징은 excel에 저장된 데이터를 사용한다. 파워앱스 플랫폼을 배우기에 좋은 data source 이지만 한번에 한명만 excel파일에 접근가능한 단점이 있어서 SharePoint나 common datasource와 같은 서비스를 production 단계에서는 사용해야 한다. 또한 excel에서 데이터는 계산식이 있어서는 안된다. 해당 파일을 내 oneDrive 저장소에 추가한다. 좌측 앱 탭에서 새앱 -> 캔버스 로 새로운 프로젝트를 만든다. 시.. 2020. 11. 15.
#18 Custom Publishers & Handling Backpressure 보호되어 있는 글 입니다. 2020. 11. 3.
#17 Schedulers 책을 읽어오면서 scheduler 를 파라미터로 사용하는 operator 들을 많이 보았다. 대부분의 경우 간편하게 DispatchQueue.main을 사용했었다. 개발자로써 DispatchQueue뿐만 아니라 global, concurrent queue 나 serial dispatch queue도 사용해 봤을 것 이다. 이번 장에는 이러한 dispatch queue 에 대해 전반적으로 알아본다. 그런데 왜 Combine 비슷한 새로운 컨셉이 필요할까? 실제 세상으로 나가서 combine schedulers가 어디에 쓰이는지 알아보자 이번 챕터에서는 왜 schedulers 컨셉이 등장했는지 알아본다. 어떻게 Combine 이 asynchronous event 와 action을 쉽게 다룰수 있는지 알아본다.. 2020. 11. 3.
GraphQL? better than REST? GraphQL 강좌 1편: GraphQL이 무엇인가? | VELOPERT.LOG 최근 페이스북에서 만든 어플리케이션 레이어 쿼리 언어인 GraphQL 이 공식릴리즈되어 여기저기서 적용한 사례가 생기고있죠 (페이스북은 원래부터 사용하고있었고, 대표적으로 갓 GitHub..) 이 Gra velopert.com GraphQL 이란 ( + 장점) 페이스북에서 만든 application layer 쿼리 언어이다. 기존에 RESTAPI 는 서버가 특정 데이터를 쿼리해서 얻은 결과를 반환하는 각각의 엔드포인트에 (예를들어 baseURL/user/get/ - 특정 유저 정보 쿼리) 요청을 던져 해당 데이터를 불러오는거라면 GraphQL은 필요한 정보를 쿼리문으로 만들어 하나의 엔드포인트에 던지면 해당 쿼리에 맞는 결과.. 2020. 11. 2.
#Chapter15 In Practice: Combine & SwiftUI SwiftUI 의 장점에 대한 내용 Declarative syntax view 는 계층에 따라 시각적으로 쉽게 파싱할 수 있다. (Hstack 안에 VStack 등등) view는 타입에 따라 파라미터를 가진다. (Text - String, HStack - spacing) view는 modifier들을 가진다. Cross-platform 각 플랫폼별 UI를 개발하는 통일화된 방법을 제시한다. 각각 플랫폼별 특징에 따라 튜닝만 해주면 된다. (Picker Controller) New memory model (view controller out) data model 과 view 를 싱크맞춰주기 위해서 view controller 가 필요했다. SwiftUI는 화면에 표시되는 UI 는 일종의 데이터에 대한 함수.. 2020. 11. 2.
#12 Key-Value Observing [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0] 변화를 다루는 것은 Combine 의 핵심기능 입니다. subscriber를 통해 Publisher 를 구독(subscribe) 하여 비동기적 event 를 처리할 수 있게 해줍니다. 이전 챕터에서 assign(to:on) 을 배웠습니다. assign()은 주어진 객체에 대한 프로퍼티의 값(value)을 publisher가 매번 새로운 값을 emit 할 때 update 시켜줄 수 있습니다. 하지만 단 하나의 변수에 대해 변화를 관찰하려는 경우는 어떨까요? Combine 은 이런 경우에 있어 몇가지 옵션을 제공합니다. KVO-compliant를 만족하는 모든(A.. 2020. 10. 30.
#9 Networking [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0]프로그래머로써 networking 작업을 많이 하게됩니다.backend 와 통신fetching datapushing updatesencoding and decoding JSONcombine은 이런 흔한 작업들을 declaratively 하게 수행할 수 있는 API 를 제공합니다.이런 API 들은 현대 앱의 2가지 부분에 도움을 줍니다.URLSessionJSON encoding and decoding through the Codable protocolURLSession extensionsURLSession은 network data 전송 작업에 권장되는 방법입니다... 2020. 10. 28.
"UI events are asynchronous" 글의 흐름 UI event async? -> async vs sync -> concurrency vs parallelism -> 멀티코어 vs 싱글코어 -> 멀티,싱글 쓰레드 Combine 을 공부하던 중 이런 문장이 있었다. Since most typical code performs some work asynchronously, and all UI events are inherently asynchronous, its impossible to make assumptions about which order the entirety of your app code will executed. 대부분의 일반적인 코드는 일부 작업을 비동기식으로 수행하고 모든 UI 이벤트는 기본적으로 비동기식이므로 앱 코드 전체가 .. 2020. 10. 28.