1. Big0

Mun Lee·2020년 9월 21일
0

빅오는 입력값이 커질 때 알고리즘의 실행 시간(시간 복잡도)와 공간 요구사항(공간 복잡도)이 어떻게 증가하는지를 분류하는 데 사용하고, 알고리즘의 효율성을 분석하는데에도 활용됨.
'상한' '최악'
빅오(Big-0)는 입력값이 무한대로 행할 때 함수의 상한을 설명하는 수학적 표기방법

0(1) : 입력값이 아무리 커도 실행 시간은 일정. 제일 좋음
0(log n): 로그는 괜찮음....
0(n) : 일차함수 . 입력값만큼 실행 시간에 영향을 받고, 알고리즘을 수행하는데 걸리는 시간은 입력값에 비례한다. Linear-Time 알고리즘.
O(nlogn) :좋은 알고리즘.
O(n^2) : 버블정렬

매핑타입은 키와 자료형으로 구성된 복합 자료형, 딕셔너리같은거.
집합 : set -> 중복된 값을 가지지 않는다.
빈 집합은 a = set() -> a -> set()
a = { 1,2,3} 빈 집합이 아닌 집합을 선언할때 set은 입력 순서가 유지되지 않으며,

파이썬에서는 숫자 정수형으로 int만을 제공한다. bool은 논리 자료형인데 1(True)과 0(False)으로 처리되는 int의 서브 클래스이다. int는 object의 하위 클래스이기도 하다.

object -> int -> bool

문제1. 팰린드롬 : 팰린드롬은 앞뒤가 똑같은 단어나 문장으로
AsA 이런거... 대소문자 구분하지말고 영문자, 숫자만을 대상으로 해보자
주어진 문자열 s에서 영문자 또는 숫자면 strs에 추가해준다.

strs = [] #빈 리스트
for char in s:
	if char.isalnum():
   	strs.append(char.lower())

팰린드롬 여부를 판단해보는 로직은, 처음꺼낸거랑 마지막에 꺼낸거랑 다르면 False을 반환 이를 모두 통과하면은 True을 리턴

While len(strs) > 1:
	if strs.pop(0) != strs.pop():
   	return False

->

def isPalindrome(self, s:str) -> bool:
	strs = []
    for char in s:
    	if char.isalnum():
        	strs.append(char.lower())
    
    
    while len(strs) > 1:
    	if strs.pop(0) != strs.pop():
        	return False
    return True

슬라이싱 + 정규표현식을 사용

def isPalindrome(s):
	s  =  s.lower()
    
    s = re.sub('[^a-z0-9]','',s)
    
    return s = s[::-1]


s[::-1] : 문자열 뒤집기 기억하자.
 

문제2. 문자열을 뒤집는 함수를 만들어보자. 입력값은 문자 배열

["h","e","l","l","o"] -> ["o","l","l","e","h"]

sol1) 포인터를 이용한스왑

from typing import List


class Solution:
    def reverseString(self, s: List[str]) -> None:
        left, right = 0, len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

문제4. 가장 흔한 단어 : 금지된 단어를 제외한 가장 흔하게 등장하는 단어츨 출력
입력값에 대한 전처리(preprocessing)작업이 필요함.
입력값에는 대소문자가 섞여있고, 쉼표 등 구두점이 존재한다.

->
words = [word for word in re.sub(r'[^\w]','',paragraph).lower().split() if word not in banned]

: 단어 문자가 아닌 문자를 공백으로 치환

profile
개발자가 되고자 하는 30살

0개의 댓글