본문 바로가기

반응형

Computer

(114)
코딩테스트 문제 (20) - 유효한 팰린드롬 팰린드롬은 앞뒤가 똑같은 단어나 문장을 말합니다. 뒤집어도 같은 말이 되는 것이죠. 문제 주어진 문자열이 팰린드롬인지 확인하는 문제입니다. 대소문자를 구분하지 않고 영문자와 숫자만을 대상으로 합니다. 1. "A man, a plan, a canal: Panama" => True 2. "race a car" => False 풀이 영문자와 숫자만을 대상으로 하므로 string의 isalnum()을 이용하거나 정규표현식의 re 라이브러리를 이용해도 됩니다. 앞뒤가 똑같으므로 영문자와 숫자만의 string으로 만든 이후에 앞에서 1개, 뒤에서 1개씩 뽑아내면서 같으면 계속 진행하고 다르다면 False를 return하면 됩니다. kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다. 홍머스 정리..
코딩테스트 문제 (19) - 무지의 먹방 라이브 카카오 2019 블라인드 코딩테스트 기출문제입니다. 문제 1. food_times = [3,1,2], k = 5 => 1 2. food_times = [8,6,4], k = 15 => 2 풀이 효율성 테스트까지 통과해야 합니다. 일반적인 for 문을 지속적으로 돌면서 시뮬레이션 할 경우 정확성 테스트는 통과할 수 있으나 효율성 테스트는 통과할 수 없을 겁니다. 1번 케이스를 한 번 생각해보죠. 5초가 되기 전까지 1->2->3->1->3의 순으로 음식을 먹어 남아있는 음식은 1이 될겁니다. 이렇게 생각을 해보면 어떨까요? 우선 먹는 시간이 적은 음식부터 오름차순으로 (시간, 음식 index) 형태로 나열해봅시다. 그렇다면 [(1,2), (2,3), (3,1)] 이 될겁니다. 음식의 개수가 3개이기 때문에..
코딩테스트 문제 (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..
collections 모듈 (3) - OrderedDict OrderedDict는 dict의 하위 클래스로서 입력 순서가 유지되는 딕셔너리입니다. 파이썬 3.6이전에는 딕셔너리의 입력 순서가 유지되지 않고 인터프리터를 실행시킬 때마다 내부의 random seed가 달라져 순서가 삽입 순서가 유지됮 않았지만 파이썬 3.7부터 입력 순서가 보존되도록 동작이 개선되었습니다. OrderedDict OrderedDict는 삽입 순서를 유지하기 위해 연결 리스트로 내부를 구성합니다. 딕셔너리의 하위 클래스이므로 딕셔너리가 지원하는 대부분의 메소드를 지원합니다. pop(key) pop()은 딕셔너리에서 해당 키 원소를 제거합니다. OrderedDict는 순서를 유지하므로 중간의 키 값을 제거하여도 나머지 키 순서가 그대로 유지됩니다. move_to_end(key, last=..
코딩테스트 문제 (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)$ 로 정의됩니다. ..

반응형