본문 바로가기

반응형

Computer

(114)
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..
코딩테스트 문제 (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으로 작성한 풀이는 다음과 같습니다. 홍머스 정..
코딩테스트 문제 (11) - 비밀 지도 카카오 2018년 블라인드 코딩테스트 1번 문제입니다. 바로 문제부터 보겠습니다. 문제 1. array1 = [9,20,28,18,11], array2 = [30,1,21,17,28] => ['#####','# # #','### #','# ## ','#####'] 2. array1 = [46,33,33,22,31,50], array2 = [27,56,19,14,14,10] => ['######','### # ','## ## ',' #### ',' #####','### # '] 풀이 지도의 각 위치마다 두 개의 지도에서 어느 하나라도 '#' 이 있을 경우 '#'이고 모두 공백일 경우 공백으로 처리하는 부분에서 OR (|) 오퍼레이션을 사용하는 것을 알 수 있습니다. 파이썬의 bin은 정수를 이진화를 시켜줍..
코딩테스트 문제 (10) - 배열의 K 번째 큰 요소 제목 그대로 주어진 배열이 있을 때, 배열의 K 번째 큰 요소를 return하면 되는 문제입니다. 문제 1. array=[3,2,3,1,2,4,5,5,6], K=4 => 4 풀이 주어진 배열의 우선순위를 기반으로 가장 큰 값부터 K번 추출하면 되는 간단한 문제입니다. 힙을 사용해 쉽게 구현할 수 있습니다. kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다. 홍머스 정리 힙, heapq 난이도: 하 참조 , p456-457

반응형