본문 바로가기

반응형

분류 전체보기

(369)
코딩테스트 문제 (18) - 후보키 카카오 2019 블라인드 코딩테스트 문제입니다. 데이터베이스의 후보키의 수를 추출하는 문제입니다. 문제 1. relations = [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"], ["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] => 2 ([0], [1,2]) 풀이 먼저 유일성을 확인하기 위해 칼럼의 모든 부분 집합을 생성해야 합니다. 부분 집합을 만드는 것은 dfs로 구현할 수 있고 만든 부분 집합이 유일성을 만족하는 지 확인합니다. 그 후, 유일성을 만족하는 부분 집합에 대해 최소성 검증을 하..
collections 모듈 (5) - deque deque는 double-ended queue의 약자로 일반 리스트와 달리 양방향에서 처리할 수 있는 queue 자료구조입니다. 리스트처럼 맨 뒤에 자료를 추가할 수 있고 맨 앞에도 자료를 추가할 수 있습니다. 특히, 맨 앞의 자료를 추가하거나 삭제할 때, 리스트는 각 원소를 복사해야되므로 $O(n)$의 시간 복잡도가 소요되지만 deque에서는 상수 시간 복잡도 $O(1)$이 소요됩니다. deque 생성 deque 생성 시에는 maxlen이란 파라미터를 지정할 수 있어 deque의 최대 크기를 지정할 수 있습니다. 최대 크기를 넘어갈 때에는 맨 앞의 원소가 삭제되면서 큐를 전체적으로 앞으로 이동합니다. appendleft(), popleft(), extendleft() deque는 맨 앞에 원소에 대한 ..
collections 모듈 (4) - defaultdict defaultdict는 딕셔너리의 하위 클래스로 딕셔너리와의 차이점은 defaultdict는 키 값이 존재하지 않을 때 초기값이 자동으로 세팅된다는 점입니다. 일반 딕셔너리는 키 값이 존재하지 않는다면 KeyError를 일으킵니다. 이 초기값의 경우 defaultdict를 어떻게 설정하느냐에 따라 달라집니다. int의 경우 0, list의 경우 빈 리스트가 존재하지 않는 키 값에 대해 자동으로 세팅됩니다. 리스트 초기값을 리스트로 처리할 경우 존재하지 않는 키에 대해서도 리스트 연산을 수행할 수 있습니다. 세트 초기값을 세트로 처리할 경우 존재하지 않는 키에 대해서 세트 연산을 수행할 수 있습니다. 함수 초기값을 함수로 할 수도 있습니다. 홍머스 정리 딕셔너리와 거의 같다. 키가 없는 경우에도 KeyEr..
ShuffleNet V2 딥러닝 모델의 연산량을 측정하는 FLOPS는 딥러닝 모델 속도 측정에 관해 얼마나 정확한 지표일까요? ShuffleNet V2는 FLOPS 이외의 memory access cost 나 gpu/arm device 등 플랫폼에 따른 다른 요소들도 고려한다고 주장하며, 효율적인 CNN 모델 설계를 위한 4 가지 가이드라인을 제시합니다. 이 가이드라인을 기반으로 기존의 ShuffleNet을 개선한 모델을 제안합니다. Introduction Xception, MobileNet, ShuffleNet 등의 경량화 모델에서 group convolution과 depthwise convolution은 굉장히 중요한 요소로 작용합니다. 이러한 요소를 많이 사용하는 것은 이론상으로 FLOPS를 줄이지만 감소된 만큼의 속도 증..
collections 모듈 (3) - OrderedDict OrderedDict는 dict의 하위 클래스로서 입력 순서가 유지되는 딕셔너리입니다. 파이썬 3.6이전에는 딕셔너리의 입력 순서가 유지되지 않고 인터프리터를 실행시킬 때마다 내부의 random seed가 달라져 순서가 삽입 순서가 유지됮 않았지만 파이썬 3.7부터 입력 순서가 보존되도록 동작이 개선되었습니다. OrderedDict OrderedDict는 삽입 순서를 유지하기 위해 연결 리스트로 내부를 구성합니다. 딕셔너리의 하위 클래스이므로 딕셔너리가 지원하는 대부분의 메소드를 지원합니다. pop(key) pop()은 딕셔너리에서 해당 키 원소를 제거합니다. OrderedDict는 순서를 유지하므로 중간의 키 값을 제거하여도 나머지 키 순서가 그대로 유지됩니다. move_to_end(key, last=..
ShuffleNet 모바일 같은 저사양 디바이스에 딥러닝 모델을 탑재하기 위해서는 제한된 하드웨어의 computation power에 맞춘 딥러닝 모델의 경량화가 필수적입니다. 모델 pruning, low-bit representation 등의 다양한 경량화 기법 중에서 ShuffleNet은 convolution 모델의 효율적인 디자인을 통해 더 적은 연산 (FLOPS) 으로도 좋은 성능을 달성하는 성과를 이루어냈습니다. ShuffleNet 그동안 학계에서는 convolution 연산을 효율화하기 위해 depthwise separable convolution이나 group convolution 등을 도입했습니다. ShuffleNet 의 주요 컨셉은 기존 Xception이나 ResNeXt의 비효율적인 pointwise con..
코딩테스트 문제 (17) - 실패율 카카오 2019 블라인드 코딩테스트 기출문제입니다. 문제 1. N = 5, stages = [2,1,2,6,2,4,3,3] => [3,4,2,1,5] 2. N = 4, stages = [4,4,4,4,4] => [4,1,2,3] 풀이 1번 케이스는 다음과 같습니다. 1번 문제에 대해서 8명에 사용자가 도전하여 1명의 사용자가 클리어를 하지 못했으므로 실패율은 1/8이 됩니다. 2번 문제에 대해서는 7명의 사용자가 도전하여 3명이 클리어를 하지 못했으므로 실패율은 2/7이 됩니다. 이런식으로 각 문제에 대해 실패율을 계산하여 실패율이 높은 스테이지부터 나열하는 문제입니다. 각 stage마다 실패율을 담은 배열을 작성한 뒤 정렬하면 간단하게 풀리는 문제입니다. kaggle.com의 notebook으로 작성한..
코딩테스트 문제 (16) - 뉴스 클러스터링 카카오 2018 블라인드 코딩테스트 문제입니다. 문제 문제는 입력으로 들어오는 두 문자열에 대해 자카드 유사도 (Jaccard Similaraity)를 계산하는 문제입니다. 1. str1 = 'FRANCE', str2 = 'french' => 16384 2. str1 = 'handshake', str2 = 'shake hands' => 65536 3. str1 = 'aa1+aa2', str2 = 'AAAA12' => 43690 4. str1 = 'E=M*C^2', str2 = 'e=m*c^2' => 65536 풀이 먼저, 자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나로 집합 $A,B$에 대해서 $J(A,B) = INTERSECTION(A,B) / UNION(A,B)$ 로 정의됩니다. ..

반응형