🤓 알고리즘

[알알알] week01 개념

manysheep 2021. 6. 15. 21:08

시간복잡도란?

문제를 해결하는데 걸리는 시간과의 상관관계.

줄이 실행되는 걸 1번의 연산이 된다고 생각하면 됨.

 

array의 길이 보통 N! (반복문)

대입 연산, 비교 연산은 1번으로 침.

 

N이 몇 승인지, 지수를 보고 비교해야 함. (상수 신경쓰지 말고)

: 연산량에 비해서 어느 정도로 증가하는지만 파악하기!

 

공간복잡도란?

문제를 해결하는데 걸리는 공간과의 상관관계.

저장하는 데이터의 양이 1개의 공간을 사용한다.

(공간 복잡도보다 시간 복잡도에 더 신경쓰기 ! )

 

alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z"] # -> 26 개의 공간을 사용합니다

max_occurrence = 0 # 1개의 공간을 사용합니다

max_alphabet = alphabet_array[0] # 1개의 공간을 사용합니다.

for alphabet in alphabet_array:  # 돌면서 결국 1개의 값을 저장하게 됨.

      occurrence = 0 # 1개의 공간을 사용합니다

 

점근표기법

알고리즘의 성능을 표기해 효율성을 평가하는 방식.

빅오: 최악의 성능이 나올때 (최악의 경우를 대비해야 하기 때문에 대부분 빅오 표기법 사용함)

빅 오메가: 최선의 성능이 나올 때

 


문자인지 확인

파이썬 내장 함수 str.isalpha() 사용하면 해당 문자열이 알파벳인지 확인 가능 > True/ False로 결과 나옴.

ex) s = "abcde"

print(s[0].isalpha()) #True

 

print("x".isalpha()) # True

 

빈도수 리스트에 저장하기

alphabet_occurrence_array = [0] * 26  <길이 26으로 초기화된 배열만들기

 

아스키(ASCII)코드 사용하기

컴은 문자도 숫자로 기억함. (0,1) 따라서 문자를 아스키코드로 변환해줘서 알게해줘야함.

 

- python char to ascii code(ord())

print(ord('a')) # 97 <a의 아스키 코드가 97이라는 뜻

print(ord('a') - ord('a')) # 0 < 인덱스 값 (문자의 ord값 - a의 ord값)

print(ord('b') - ord('a')) # 1 < 인덱스 값

 

- python number to char(chr()) # ASCII -> char

a -> 0 (문자 -> 인덱스)

a -> ord(a) -> 문자의 아스키 -ord(a) = 인덱스 값

 

0 -> a (아스키 -> 문자)

인덱스 값  -> 인덱스 값 +ord(a) -> 아스키 값 -> chr(97) -> a(문자)

 

index + ord('a') = 문자

chr(97) == 'a'

chr(0 + ord('a')) == 'a'

chr(0 + 97) == 'a'

chr(1 + 97) == 'b'

 

 

continue(코드 건너뛰기)

조건 a :

    continue # 조건 a에 해당된다면 다음 인덱스로 넘어가기. 

 

https://dojang.io/mod/page/view.php?id=2254 

 

파이썬 코딩 도장: 18.2 continue로 코드 실행 건너뛰기

이번에는 continue를 사용하여 일부 코드를 실행하지 않고 건너뛰어 보겠습니다. 18.2.1  for에서 continue로 코드 실행 건너뛰기 다음은 for로 0부터 99까지 반복하면서 홀수만 출력합니다. continue_for.py

dojang.io

 

728x90