본문 바로가기

반응형

분류 전체보기

(369)
collections 모듈 (2) - Counter Counter는 주어진 리스트, 문자열 등의 원소의 빈도 값을 "원소:빈도수"로 return하는 dict의 하위 클래스입니다. 빈도 수를 셀 일이 있을 때 사용하면 매우 유용합니다. Counter 메소드 Counter에는 다음과 같이 리스트, 문자열, 튜플 등의 자료형에서 동일한 값의 자료가 얼마인지 파악하는데 사용됩니다. elements() 인스턴스 요소의 개수를 카운터 개수만큼 보여줍니다. most_common(n) most_common 메소드는 굉장히 유용합니다. 자주 등장하는 최빈값을 (key, value)의 튜플로 묶어 리스트로 return합니다. 이 때, 파라미터로 들어가는 n 값을 통해 return되는 원소의 개수를 조절할 수 있습니다. subtract() 두 개의 Counter 객체에서 값..
코딩테스트 문제 (15) - 캐시 카카오 2018 블라인드 코딩테스트 기출문제입니다. 문제 1. cacheSize = 3, cities = ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] => 50 2. cacheSize = 3, cities = ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] => 21 3. cacheSize = 2, cities = ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYor..
코딩테스트 문제 (14) - 다트 게임 카카오 2018 블라인드 코딩테스트 기출문제입니다. 문제 1. '1S2D*3T' => 37 2. '1D2S#10S' => 9 3. '1D2D0T' => 3 4. '1S*2S*3S' => 23 5. '1D#2D*3S' => 5 6. '1T2D3D#' => -4 7. '1D2S3T*' => 59 풀이 문자열 처리를 체크하는 문제입니다. 1번 케이스 '1S2D*3T'를 살펴보면 '1^1*2 + 2^2*2 + 3^3' 으로 37이 나오게 되는데요. 입력 string에 대해 ['1S', '2D*', '3T']로 나누고 스타상과 아차상의 효과를 문제 조건대로 바꾼 후에 파이썬의 eval() 함수를 이용하면 될 것 같습니다. kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다. 홍머스 정리 난이도..
collections 모듈 (1) - namedtuple 이번 포스트에서는 collections 파이썬 내장 모듈에 대해 알아보겠습니다. collections 모듈은 다양한 데이터 컨테이너 타입을 지원하는 모듈로 tuple, dict 와 같은 기존 데이터 타입의 확장된 타입을 지원하거나 추상화된 컨테이너 타입 또한 지원합니다. 이번 포스트에서는 collections 모듈에서 자주 쓰이는 컨테이너 타입인 namedtuple에 대해 알아보겠습니다. namedtuple namedtuple은 tuple의 subclass로서 tuple의 불변성과 클래스의 접근성을 동시에 갖춰 다양한 접근법을 지원하는 타입입니다. 공식문서 예제를 통해 한 번 살펴보고 namedtuple의 메소드들에 대해 알아보겠습니다. namedtuple 선언 시 ['x', 'y']로 하였지만 'x y..
FLOPS (FLoating point OPerationS) - 플롭스 개발한 딥러닝 모델은 얼마나 빠를까요? 특히, 모바일 같은 저사양 디바이스에서의 딥 뉴럴 네트워크에서는 성능보다는 해당 사양에서 원활히 돌아가는지가 서비스 측면에서 매우 중요합니다. 물론, 성능은 최대한 유지하는 선에서 말이죠. 모바일 같은 엣지 디바이스에서의 딥러닝 모델을 위해서는 무엇을 고려해야 할까요? 먼저 모델의 크기일겁니다. (몇 MB 인지) 동작 시에 메인 메모리를 얼마나 잡아먹는지도 있겠죠. 메모리를 너무 많이 잡아먹으면 꺼지겠죠. 스트리밍 비디오 등 리얼 타임이 중요한 태스크에 대해서 동작 시간이 얼마나 걸리냐도 있겠습니다. 전력소모도 고려사항이 되어야 할겁니다. 게임 같은 어플리케이션을 켰을 때 배터리가 엄청나게 빨리는 것을 경험해보셨을 겁니다. 그렇다면 딥러닝 모델이 얼마나 가볍고 빠른..
코딩테스트 문제 (13) - 부분 집합 문제 입력으로 주어진 배열에 대해 부분 집합을 return하는 문제입니다. 1. array = [1,2,3] => [[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]] 풀이 먼저 결과 형식은 리스트 안에 부분집합을 추가하는 형태입니다. 배열을 for 루프로 순회하면서 공집합부터 ([]) 추가하고 첫 번째 원소 1에 대해서 [1], [1,2], [1,2,3], [1,3] 을 추가하고 그 다음 원소 2에 대해 [2],[2,3] 을 추가하는 식을 생각해볼 수 있겠네요. 바로 그래프의 깊이우선탐색 (dfs) 를 이용하면 풀이가 가능합니다. kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다. 홍머스 정리 난이도: 중, 그래프 구조를 생각해야 한다. 참조 , p355-3..
코딩테스트 문제 (12) - 상위 K 빈도 요소 문제 간단한 문제로 입력으로 들어온 배열에 대해 K 번 이상 등장하는 요소를 추출하는 문제입니다. 1. array = [1,1,1,2,2,3], K = 2 => [1,2] 풀이 먼저 배열의 각 원소를 세야할 것 같습니다. for 루프를 이용해도 되지만 collections 모듈에는 배열의 빈도 수를 계산해주는 Counter 라는 함수가 존재합니다. Counter 함수는 해당 원소를 키, 빈도 수를 값으로 하는 딕셔너리를 return합니다. K번 이상 등장하는 원소를 추출하는 것이니 빈도 수가 가장 높은 것부터 K까지 추출하면 될 것 같습니다. 우선순위 순으로 추출하므로 파이썬의 heapq 모듈을 활용하면 될 것 같습니다. kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다. 홍머스 정..
자료구조 - 해시 테이블 (Hash Table) 해시 테이블은 임의 크기 데이터를 고정 크기 값으로 매핑하는 해시 함수를 기반으로 동작하는 대부분의 연산의 시간 복잡도가 상수 시간 $O(1)$ 이 소요되는 자료구조입니다. 한스 피터 룬 (Hans Peter Luhn)이 처음 사용한 것으로 알려져 있으며, 현대에도 각종 프로그래밍 및 알고리즘에 중요하게 사용되는 자료구조입니다. 해시 테이블은 키:값 (key:value) 의 형태로 데이터를 저장합니다. 키 (key) 값에는 해시 함수를 적용해 값이 저장된 배열 (버킷)에 대한 고유한 인덱스를 생성하고 이 인덱스를 활용해 값을 저장하거나 검색합니다. 따라서 키에 대해 해시 함수를 한 번만 적용하면 되니, 저장이나 검색에 $O(1)$의 상수 시간 복잡도가 소요됩니다. 위 그림에서 키인 'John Smith'..

반응형