
오늘은 GCD에 대해 정리해보려 합니다! GCD는 iOS앱 프로그래밍에서 매우 중요한 부분이기도 하고 잘 정리된 글들이 많기 때문에, 저는 핵심적인 개념과 코드(실험?) 위주로 정리해볼까 합니다. GCD란? - Grand Central Dispatch의 약자로, Apple에서 멀티 코어 프로세서 및 기타 대칭적 멀티 프로세싱 시스템이 있는 시스템에 대한 애플리케이션 지원을 최적화하기 위해 개발 한 기술입니다. GCD는 스레드 풀 패턴을 기반으로 한 작업 병렬 처리의 구현으로 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리하기 때문에 프로그래머는 쉽게 사용할 수 있습니다. (사용하기 단순하고 성능도 좋다는 뜻) (위키 백과, 부스트코스 참고) Dispatch Queue An object that m..

오늘은 정규표현식에 대해 정리해보려고 합니다. 정규표현식을 모르는 사람이 표현식을 보면 매우 난해하게 느껴지지만 알고 사용하면 정말 정말 유용하기 때문에, 겁먹지 마시고 공부해보시길 바랍니다 (문자열 처리에 수십 줄의 코드를 작성해야 할 걸 단 몇 줄 만에 끝낼 수 있거든요!) 정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 입니다. (위키 참고) 이 정규표현식을 사용하면 특정한 규칙을 만족하는지 유효성 검사에 유용하기 때문에 사용자가 입력한 이메일이나 비밀번호가 우리가 만들어 놓은 패턴 혹은 규칙과 부합하는지 쉽게 확인할 수 있습니다. 우선 정규표현식을 사용하려면 사용방법을 알아야겠죠? 정규 표현식에는 다음과 같은 *메타 문자들이 사용됩니다. * 메타 문자: 원래 그 문..

안녕하세요 오랜만에 알고리즘 풀이를 포스팅해보려 합니다 :) 오늘 포스팅할 문제는 카카오 blind recruitment에 나왔던 '자물쇠와 열쇠' 입니다. programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr [문제 설명] [제한사항 & 입출력 예] 이 문제는 2차원 배열을 잘 다룰 수 있는지 확인하는 문제로, 2차원 배열의 회전과 이동방법을 구현해서 완전탐색을 수행하면 풀리는 문제입니다. [접근 방식] 1. key가 회전 가능하기 때문에, key를 회전시키기 위한 rotat..

스트링 편집 거리(string edit distance) 알고리즘이란 두 문자열의 유사도를 측정하기 위해 사용되는 알고리즘으로 Levenshtein distance(LD)라고도 합니다. 스트링 편집 거리 알고리즘은 논문, 보고서 등의 표절 검사, DNA 염기 서열의 유사도 검사 등에 사용되어지는데요. 두 문자열의 유사도는 S: 원래 스트링 T: 비교 스트링이라 했을 때 S -> T로 변환하는데 필요한 삽입, 삭제, 대치 연산의 최소 비용(최소 편집 횟수)을 구함으로써 판단합니다. (비용이 작게 나올수록 유사도가 큼) 만약 GUMBO라는 단어와 GAMBOL이라는 단어의 편집 거리를 구해보면, U -> A로 대치 (비용 +1), 맨 마지막에 L 추가 (비용 +1)로 편집 거리는 2가 되게 됩니다. (삽입, ..

오늘은 ARC 즉, Automatic Reference Counting에 대해 정리해보려 합니다. ARC란? - Swift는 ARC를 활용해 앱의 메모리 사용을 추적하고 관리합니다. 인스턴스가 더 이상 필요하지 않으면 메모리에서 해제합니다. 그렇기 때문에 우리는 메모리 관리에서 비교적 자유로워질 수 있죠 ㅎㅎ 하지만, 강한 참조로 순환이 이루어질 때는 메모리 누수가 발생할 수 있기 때문에 우리가 적절한 조치를 해줘야 합니다. 지금은 무슨 말인지 잘 모르겠어도 뒷부분에 설명할 예정이니 걱정 안 하셔도 됩니다! 작동 방식 - ARC는 각 인스턴스가 얼마나 참조되고 있는지를 추적하고 저장함으로써 메모리 관리를 합니다. 만약 참조 counting이 1 이상이면 인스턴스는 메모리에 계속 남아 있고 0이 되었을 때..

동적 계획법 - 주어진 문제를 여러 개의 소문제로 분할하여 각 소문제의 해결안을 바탕으로 주어진 문제를 해결, 이때 각 소문제는 다시 또 여러 개의 소문제로 분할 가능하다. 각 소문제는 원래 주어진 문제와 동일한 문제이지만 입력의 크기가 작다. 여러 개의 소문제로 분할하여...??? 응?? DP를 처음 공부하신다면 이게 무슨 말이지? 이해가 잘 안 가실 수 있으실 텐데요. 그래서 하나의 좋은 예시가 있습니다 ㅎㅎ 바로 피보나치 수열인데요. 피보나치 수는 1, 1, 2, 3, 5, 8... 로 다음과 같은 점화식으로 나타낼 수 있습니다. 이제 이런 피보나치 수열을 다음과 같이 분해해서 트리 형태로 나타내 보면, 소문제가 상위 문제를 해결하기 위해 사용되는 것을 볼 수 있습니다. 이 말이 즉, 위에서 설명한..

통신과정에서 다음과 같은 로그와 마주하게 되었다. "unable to determine interface type without an established connection" "unable to determine fallback status without a connection" 간단히 해석하면 "연결 설정이 되어 있지 않은 경우 인터페이스 타입을 결정할 수 없다."가 될 것 같다. 네트워크 통신과정에서 눈에 띄는 문제는 없었으나 어쨋든 이런 로그가 찍히면 불안하기 때문에 무엇이 문제인지 찾아보았다. 서버사이드 문제로 애플에서 요구하는 *TLS(전송계층보안)를 충족하지 못할 경우 위와 같이 로그가 뜨거나 실제 기기에서 네트워크 통신이 안되거나 하는 문제가 발생하는 것 같다. * TLS: 전송 계층 보안..

AVL트리 역시 레드-블랙 트리와 마찬가지로 자가 균형 이진 탐색 트리입니다. 레드-블랙 트리와 다른 점은 균형(balance)을 유지하기 위해 적용하는 조건이 다른데요. 그래서 같은 자가 균형 이진 탐색 트리이지만 같은 키를 삽입해도 트리의 결과는 다르게 나올 수 있습니다. ex) KEY = [2, 1, 8, 9, 7, 3, 6, 4, 5] 삽입 시 AVL트리 조건은 다음과 같습니다. 1. *높이 차가 2 이상이 되면 회전을 통해 높이차를 1 이하로 유지 * 높이 차 = 오른쪽 서브 트리의 높이 - 왼쪽 서브 트리의 높이 조건은 엄청 간단하죠?? 여기서 높이 차에 대해 예시를 통해 설명드리자면 각각의 노드 옆에 높이차를 적게 되는데, 이 높이 차는 해당 노드의 우측 서브 트리 높이- 왼쪽 서브 트리 높..

레드 블랙트리 개념설명에서 이어지는 포스팅으로 레드-블랙트리 개념에 대해 잘 모르시면 이 글을 먼저 읽고 와주세요! 레드블랙 트리 파이썬 코드 class Node(): def __init__(self, data): self.data = data self.parent = self.left = self.right = None self.color = 'Red' # 신규 삽입되는 노드는 항상 빨강 class RedBlackTree: # 조부모 노드 찾기 def find_grandparent_node(self,node): if (node != None and node.parent != None): return node.parent.parent else: return None # 삼촌 노드 찾기 def find_u..

이진 탐색 트리의 경우 탐색에 소요되는 평균 시간 복잡도는 O(logN)이지만 최악의 경우 O(N)이 나오게 되는데요. 다음과 같이 한쪽으로 편향되어 있을 때, 즉 트리의 균형이 맞지 않을 때 탐색에 소요되는 시간이 증가하게 됩니다. 그래서 나온 것이 균형 트리(balanced tree)입니다. 균형 트리는 신규 노드 삽입시 특정 조건을 만족하도록 하여 균형 잡힌 트리를 만들어주게 됩니다. 대표적인 균형트리에는 레드-블랙트리, AVL트리 등이 있는데요. 오늘 알아볼 균형 트리는 레드-블랙 트리입니다. 레드-블랙트리는 이름에서 볼 수 있듯이 검정색 노드와 빨간색 노드를 사용하는 트리로 균형 잡힌 이진 탐색 트리라고 할 수 있습니다. 레드 블랙 트리는 신규 노드(신규 노드는 색상 레드) 삽입 시 다음과 같이..