본문 바로가기

728x90
반응형

힙꾸의 일상

(66)
[python3 | 알고리즘] 14. 문자열 조작(가장 흔한 단어) [조건] 1) 금지 단어를 제외한 가장 흔하게 등장하는 단어 출력 2) 대소문자 구분 X 3) 구두점(쉼표, 마침표 등) 무시 [입력] paragraph = "Bob hit a ball, the hit BALL flew far after it was hit." banned = ["hit"] [출력] "ball" 1. 리스트 컴프리헨션, Counter 객체 사용 - 전처리 작업 필요 - 정규식 사용 * 정규식 1) \w ==> 단어 문자를 뜻함 2) ^ ==> not #Counter 객체 사용 X def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: words = [word for word in re.sub(r'[^\w]', ' ', pa..
[python3 | 알고리즘] 13. 문자열 조작(로그파일 재정렬) [조건] 1) 로그 가장 앞 부분은 식별자 2) 문자로 구성된 로그가 숫자 로그보다 앞으로 3) 식별자는 순서에 영향을 주진 않지만, 문자가 동일할 경우 식별자 순으로 함 4) 숫자 로그는 입력 순으로 한다. [입력] logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"] [출력] ["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"] 1. 람다 + 연산자 이용 - 문자 vs 숫자 구분 def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digit..
[python3 | 알고리즘] 12. 문자열 조작(문자열 뒤집기) 1. 투 포인터를 이용한 스왑 - 2개의 포인터를 이용해 범위를 조정해가며 풀이 - 리턴 없이 리스트 내부를 직접 조작할 때 사용. def reverseString(self, s:List[str]) -> None: left, right = 0, len(s) - 1 while left None: s.reverse() 3. 슬라이싱 사용 - 성능은 좋지만 가끔 안되는 플랫폼이 있다. def reverseString(self, s: List[str]) -> None: s = s[::-1]
[python3 | 알고리즘] 11. 문자열 조작(팰린드롬) 1. 펠린드롬(Palindrome)인지 체크하기 - 조건 : 대소문자 구분하지 않음, 영문자와 숫자로만으로 구성 - 사용 함수 1) isalnum() : 영문자, 숫자 여부 판별 함수 2) lower() : 모두 소문자로 바꾸는 함수 2. 구현 방법 - 리스트 이용 - Deque 이용 - 슬라이싱 이용 리스트로 구현 - O(n제곱) - 포인트 : pop(0)와 pop() 이 같은가? # list 선언 strs = [] Deque 자료형 이용 - O(n) : 리스트보다 속도 빠름 - 포인트 : popleft()와 pop() 이 같은가? # deque 선언 strs : Deque = collections.deque() 슬라이싱 이용 - Deque 보다 속도 빠름. C언어보다는 느림 - 포인트 : 정규식 이용..
[python3] 10. 빅오 표기법(big-O) 1. 빅오 표기법 - 입력값이 무한대로 향할 때 함수의 상한을 설명하는 수학적 표기 방법 2. 파일 업로드 예시 - 파일 크기(n) , 소요시간(O(n)) - 파일 크기와 소요시간은 비례한다. - 접근적 실행 시간(시간복잡도 == 계산복잡도) ==> 비용(n) 고려 없이 파일(n)이 아주 클 때 물리적으로 비행기를 통해 배달하는 시간(항상 일정한 시간 소요) 3. 빅오로 시간복잡도 표현 - 최고차항만을 표기한다. 상수항은 무시한다. O(1) - 입력값(n)이 아무리 커도 실행시간은 일정함. 최고의 알고리즘이다. O(log n) - 입력값(n)에 영향을 받지만 log n은 큰 영향을 받지는 않는다. O(n) - 입력값 만큼 실행 시간에 영향을 받는다. - 선형시간 (linear-time) 알고리즘 - 정렬..
[python3] 8. Generator(제너레이터) 1. generator 생성 및 사용 1) 생성 def get_num(): n = 0 while True: n += 1 yield n print(get_num()) >>> 2) 사용 g = get_num() next(g) next(g) next(g) >>> 1 >>> 2 >>> 3 2. 대표적 함수 - range() 2. Generator vs Array - 제너레이터 : 한 번 사용할 수 있는 루프(Object). 사용할 때 생성 - Array : 메모리에 생성해두고 사용 # Array # 이미 생성된 값이 들어가 있음. arr = [n for n in range(1000)] # Generator # 생성해야 함. (생성은 next()) gner = range(1000) # 길이 비교 (길이 같음) p..
[python3] 7. 동적 배열, 딕셔너리 1. 동적 배열 파이썬 vs 자바 list() ArrayList - list() ==> 모든 자료형을 포인터로 연결함. 1) 추가 append() 2) 삽입 insert() 3) 삭제 del remove() pop() 2. 딕셔너리 파이썬 vs 자바 dict() HashMap - 키,값 구조로 되어있다. - 내부적으로 Hash Table로 구현되어 있다. - python 3.7 이상 사용 가능 - 대부분의 연산이 빅오 표기법의 O(1)에 처리 가능한 매우 우수한 자료형이다. - python 3.6 이하에서는 입력 순서 유지가 되지 않음. 1) 출력 items() 2) 삭제 del 3) 키가 없을 때 에러 없이 키 생성 및 값 할당하기(defaultdict 객체) collections.defaultdict..
[python3] 6. 파이썬 표준 타입 구조 * 문자열은 불변 객체다! a = 'abc' a = 'def' ==> 'abc' 문자열 주소와 def 문자열 주소가 다르고, a는 abc 문자열 주소를 참조했다가 def 문자열 주소를 참조한다. ==> 즉, 참조 주소가 바뀌는 것. * 파이썬은 원시타입이 아니라 객체타입이다! 1) 원시타입(C, Java) - 메모리에 정확히 타입 크기만큼 공간을 할당한다. - 오로지 값으로 메모리를 채워넣는다. - 요소가 연속된 순서로 메모리에 배치된다. 2) 객체타입(Python, Java) - 불변 객체와 가변 객체로 나뉜다. - 가변 객체 : 리스트, 딕셔너리, 집합(set) - 불변 객체 : 그 외 모두 * 파이썬은 Null을 None으로 쓴다 1) None 비교 : is 2) 값 비교 : ==

728x90
반응형