본문 바로가기

CS/Python

Read & Analysis | 시간복잡도, 공간복잡도 등

 

파인만 알고리즘

 

 

 

@Read & Analysis

-문제를 읽을 때, 어떤 부분을 초점을 두고 읽어야 할까?

-문제의 조건들을 추상화하는 연습

-시간복잡도, 공간복잡도 어림잡기

 

 

 

 

@가장 먼저 체크할 것

-시간 제한(안 써있으면 질문)

-메모리 제한

-입력 범위

 

 

 

 

@시간복잡도

-어떤 코드의 실행 시간이 오래 걸릴까?

 -> 연산이 많은 코드

 

-계산량은 어떤 값과 상관 있을까?

 -> 입력

 

-연산에 따라 속도가 다름

 

-모든 연산을 다 카운팅할 수 없음

 

-최악의 경우와 최선의 경우?

 -> 알고리즘에 따라 다름

 

-카운팅에 따라 실행시간도 다름

 -> 서버와 컴퓨터의 속도 차 등

 

 

 

=> 대충 계산하자! (접근적 표기법)

     Big-O Notation

 

 

 

 

log가 붙으면 절반이나 뭐 그렇게 균등하게 쪼개 볼 때 많이 사용한다고 보면 됨

 

 

 

 

@시간 | 공간복잡도

-Big-O notation은 점근적 표현법

 시간과 공간 차원에서 각각 다룰 수 있음 => 시간복잡도와 공간복잡도

 계산 + 시스템에 대한 감(센스)이 중요

 

 

 

 

@방법

-Navie한 풀이 떠올리기 (제한 상관 없이)

 중복되는 과정을 어떻게 줄일 수 있을까 고민하는 과정이 필요

 그렇기에 본인이 생각하는 가장 쉬운 풀이를 떠올리기

 

-중간 과정에 반드시 필요한 로직 생각하기

 

-예제 보기

 

-코드 짜기

 

 

 

 

@읽기와 분석 외전

-입력과 초기화 팁

-에러 메시지 이해하기

-추상화와 기능 분리: 함수 활용

-가독성: indent 줄이자

-명명법은 통일

 

 

 

 

@Map과 Comprehension

 

-입력의 대표적인 3가지

 : 수, 문자열(문자 배열), 배열

 

num = int(input())

string = input()
char_lst = list(input())

lst = list(map(int, input().split()))

input()은 문장(str) 단위로 받기 때문에 숫자면 형변환 필수

char형으로 받고 싶다면 string 자체로는 내용물을 바꾸지 못하기 때문에 list 씌워줘야 함

 

map(x, y)은 x함수를 y의 원소에 모두 적용한 map 객체 반환

나중에 char_lst 내용을 문자열로 만들고 싶다면? join 메서드

 

 

 

-List 초기화는 Comprehension으로!

 

lst_1d = [0 for _ in range(N)]
lst_2d = [[0 for _ in range(N)] for j in range(N)]

0을 N개로 채운 1D 배열 만들어라

0을 N개 만들고 그 N개 짜리를 또 N개 만들어라

 

 

 

 

* 문제 풀 때는 메인 함수가 최소화 돼야 하기 때문에 기능을 함수로 만드는 게 좋음

 

-간략한 psedo-code 느낌으로 작성

 디테일한 부분은 함수를 만들며 수정

 

 

 

 

@명명법

 

  • 카멜 표기법 (Camel Case): 각 단어의 첫 글자를 대문자로 적는다. 단, 가장 첫 글자는 소문자를 사용한다.

    • 예시: camelCase, variableN, thisIsCamelCase, howToSolveThisProblem

  • 스네이크 표기법 (Snake Case): 소문자만 사용하고, 각 단어의 사이에 언더바(_)를 넣어서 적는다.

    • 예시: snake_case, variable_n, this_is_snake_case, how_to_solve_this_problem

  • 파스칼 표기법 (Pascal Case): 카멜 표기법과 같지만, 가장 첫 글자도 대문자를 사용한다.

    • 예시: PascalCase, VariableN, ThisIsPascalCase, HowToSolveThisProblem

 

 

 

'CS > Python' 카테고리의 다른 글

sort (select/bubble/quick/merge/radix)  (0) 2021.03.05
코테 응용하기 좋은 수학 알고리즘  (0) 2021.03.01
Pandas | Selection, index Change, Reindex, Data drop  (0) 2021.02.28
Pandas  (0) 2021.02.27
Numpy data i/o  (0) 2021.02.20

Tiny Star