반응형

분류 전체보기 823

[자료구조] 배열 - 동적 배열, 정적 배열

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 배열 배열은 값 또는 변수 엘리먼트의 집합으로 구성된 구조로 하나 이상의 인덱스 또는 키로 식별됩니다. 자료구조는 크게 메모리 공간 기반의 연속 방식과 포인터 기반의 연결 방식으로 나뉩니다. 배열은 연속 방식의 가장 기본이 되는 자료형 입니다. 연결 방식의 가장 기본이 되는 자료형은 연결 리스트 입니다. 추상 자료형의 실제 구변 대부분은 배열 또는 연결 리스트를 기반으로 합니다. 예를 들어 스택은 연결 리스트로 구현하고, 큐는 배열로 구현하는 식 입니다. 물론 반대의 경우도 가능합니다. 배열의 장점으로는 어느 위치에나 O(1)에 조회가 가능하다는 장점이 있습니다. C 언어에서의 배열 - 정적 배열 C언어에..

Python/알고리즘 2021.02.10

[파이썬 알고리즘 인터뷰] 6. 가장 긴 팰린드롬 부분 문자열

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 6. 가장 긴 팰린드롬 부분 문자열 리트코드 5번 문제입니다. leetcode.com/problems/longest-palindromic-substring/ 풀이 팰린드롬은 홀수, 짝수 펠린드롬으로 나눠서 생각해 볼 수 있습니다. 책에서는 홀수, 짝수 펠린드롬을 각각 판별하도록 풀어냈습니다. 펠린드롬을 판별하는 함수를 정의하고 홀수, 짝수 펠린드롬을 문자열 처음부터 판별해나갑니다. max 함수에 key 인자를 len으로 입력하여 문자열 길이를 기준으로 최대값을 취할 수 있다는 것을 배웠습니다. def longestPalindrome(self, s): # 팰린드롬..

Python/알고리즘 2021.02.10

[확률론] 이산형 확률분포 - 포아송 분포

고려대학교 김성범 교수님의 확률/통계 강의와 교재 'Sheldon Ross, A First Course in Probability (10th edition)' 를 공부하고 정리한 내용입니다. 포아송 분포(Poisson distribution) 확률 변수 X가 이산형 값인 0,1,2,... 중 하나를 취할 때 파라미터 $\lambda$를 지닌 포아송 확률 변수라고 정의합니다. $\lambda$(람다) = np는 단위 시간 동안 특정 사건이 몇번 발생한 것인지를 나타냅니다. 단위 시간동안 사건의 평균 발생 회수로 이해하면 됩니다. 그리고 포아송 확률 변수에서 나온 실수를 확률로 변환해주는 확률질량함수는 다음과 같이 정의됩니다. 포아송 확률질량함수는 실수를 확률로 대응하는 함수이므로 모든 값을 더하면 1이 됩..

수학/확률론 2021.02.10

[파이썬 알고리즘 인터뷰] 5. 그룹 애너그램

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 5. 그룹 애너그램 리트코드 49번 문제입니다. leetcode.com/problems/group-anagrams/ 풀이 dictionary의 키에 정렬된 strs 입력하고 값을 정렬되지 않은 strs 입력한다는게 신선했습니다. sorted 함수는 list 값을 반환하므로 딕셔너리의 key로 지정할 수 없습니다. 따라서 join 함수로 리스트를 제거하여 key로 입력합니다. def groupAnagrams(self, strs): anagrams = collections.defaultdict(list) for word in strs: # list 벗기기 위해 .join 이용 anagrams[''.join(s..

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 4. 가장 흔한 단어

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 4. 가장 흔한 단어 리트코드 819번 문제입니다. leetcode.com/problems/most-common-word/ 풀이 paragraph를 전처리 하는 과정이 핵심이었습니다. banned에 해당하는 문자와 특수기호, 띄어쓰기를 제거해야 합니다. 파이썬 리스트컴프리헨션을 이용해 한줄로 전처리하는 코드가 인상깊었습니다. def mostCommonWord(self, paragraph, banned): words = [word for word in re.sub(r'[^\w]',' ',paragraph) .lower().split() if word not in banned] counts = collecti..

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 3. 로그 파일 재정렬

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 3. 로그 파일 재정렬 리트코드 937번 문제입니다. 풀이 sort함수 key인자에 lambda를 활용하여 [1] 인덱스 기준으로 정렬하고 값이 동일하면 [0] 인덱스로 정렬하도록 하는 것이 핵심이었습니다. def reorderLogFiles(self, logs): digits, letters = [], [] for log in logs: if log[1].isdigit(): digits.append(log) else: letters.append(log) letters.sort(key=lambda x: (x.split()[1], x.split()[0])) return letters + digits

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 2. 문자열 뒤집기

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 2. 문자열 뒤집기 문제 : 문자열을 뒤집는 함수를 작성하는 문제입니다. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 조작해야 합니다. 풀이 1. 투포인터를 이용한 풀이 주어진 문자열 슬라이싱에서 왼쪽, 오른쪽 포인터를 설정하고 해당하는 문자를 바꿔주는 풀이입니다. def reverseString(s): left, right = 0, len(s)-1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 1. 유효한 팰린드롬

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 1. 유효한 팰린드롬 문제 : 주어진 문자열이 팰린드롬인지 확인하는 문제입니다. 대소문자를 구문하지 않으며, 영문자와 숫자만을 대상으로 합니다. 풀이 1. 슬라이싱 이용한 풀이 책에서는 re 모듈을 이용해서 입력값을 전처리한 뒤에 슬라이싱을 이용하는 풀이법이 나와있습니다. re 모듈 사용법을 익혀둔다면 문자열 관련 문제를 풀 때 유용할것 같습니다. def isPalindrome(s): s = s.lower() s = re.sub('[^a-z0-9]', '', s) return s == s[::-1] re.sub에 '[^a-z0-9]' 인자를 입력하여 알파벳과 숫자를 제외한 모든 문자를 지정합니다. 다음 인..

Python/알고리즘 2021.02.08

[확률론] 이산형 확률분포 - 이항분포

고려대학교 김성범 교수님의 확률/통계 강의와 교재 'Sheldon Ross, A First Course in Probability (10th edition)' 를 공부하고 정리한 내용입니다. 이항 분포(Binomial Distribution) 베르누이 실험을 한 번 한것을 베르누이 시행이라고 합니다. 이항 분포는 독립적인 베르누이 시행을 n번 한것 입니다. 독립적인 베르누이 시행이므로 첫 번째 시행은 두 번째 시행에 영향을 주지 않습니다. 확률 변수 X는 n번 시행에서 성공횟수로 정의합니다. 이항 분포의 확률질량함수(pmf)는 다음과 같습니다. 이항 분포는 이항확률함수로부터 나온 확률들의 패턴을 말합니다. 그리고 모수(parameter) n과 p를 갖고 있습니다. 그림을 보면 모수인 p와 n에 따라 분포..

수학/확률론 2021.02.08

[확률론] 이산형 확률분포 - 베르누이 분포

고려대학교 김성범 교수님의 확률/통계 강의와 교재 'Sheldon Ross, A First Course in Probability (10th edition)' 를 공부하고 정리한 내용입니다. 김성범 교수님 강의에서 6가지 이산형 확률분포를 다루고 있습니다. (1) 베르누이 분포 (2) 이항 분포 (3) 포아송 분포 (4) 기하 분포 (5) 음이항 분포 (6) 초기하 분포 순서대로 살펴보도록 하겠습니다. 우선 베르누이 분포입니다. 이산형 확률분포 - 베르누이 분포(Bernoulli Distribution) 두 개의 값만 갖는 확률 변수 X를 생각해보겠습니다. 1 = '성공' 0 = '실패' X는 위 두개의 값만 갖습니다. X = {0, 1} 이 경우에 X의 확률질량함수는 다음과 같이 정의할 수 있습니다. ..

수학/확률론 2021.02.07
반응형