복잡도 시간 복잡도 문제를 해결하는 데 걸리는 시간과 입력의 함수 관계 빅오 표기법 알고리즘의 로직이 얼마나 시간이 걸리는지(시간 복잡도)를 표현할 때 사용 입력 범위 n을 기준으로 로직의 반복 정도를 표시 가장 영향을 많이 미치는(=가장 큰) 항만 남김 시간 복잡도의 필요성 효율적인 코드 개선을 위해 필요 시간 복잡도의 속도 비교 공간 복잡도 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양 정적 변수와 동적 변수(재귀적 정의)를 모두 포함 자료구조에서의 시간 복잡도 [자료 구조의 평균 시간 복잡도] 자료구조 접근 탐색 삽입 삭제 배열 (Array) O(1) O(n) O(n) O(n) 스택 (Stack) O(n) O(n) O(1) O(1) 큐 (Queue) O(n) O(n) O(1) O(1) 이중 ..
📌 재귀 알고리즘의 기본 📚 재귀(recursive) 알아보기 어떤 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는 경우 재귀를 효과적으로 사용하면 프로그램을 간결하고 효율성 있게 작성 📚 팩토리얼 = 순차 곱셈 팩토리얼 : 양의 정수를 순서대로 곱한다는 의미 팩토리얼 n! 의 정의 (n은 양의 정수) 0! = 1 n > 0이면 n! = n * (n - 1)! # 양의 정수 n의 팩토리얼 구하기 def factorial(n: int) -> int: """양의 정수 n의 팩토리얼 값을 재귀적으로 구함""" if n > 0: return n * factorial(n - 1) else: return 1 if __name__ == '__main__': n = int(input('출력할 팩토리..
📌 스택이란? 📚 스택 알아보기 📃 스택 (stack) 데이터를 임시 저장할 때 사용하는 자료구조 데이터의 입력과 출력 순서는 후입선출(LIFO) 방식 푸시(push) : 스택에 데이터를 넣는 작업 팝(pop) : 스택에서 데이터를 거내는 작업 겹쳐쌓은 접시처럼 데이터를 넣고 꺼내는 작업을 맨위부터 진행 푸시하고 팝하는 윗부분을 꼭대기(top), 아랫 부분을 바닥(bottom) 📚 스택 구현하기 📃 스택을 구현하는데 필요한 데이터 스택 배열 : stk 푸시한 데이터를 저장하는 스택 본체인 list 배열 인덱스가 0인 원소가 스택의 바닥 가장 먼저 푸시하여 데이터를 저장하는 곳은 stk[0] 스택 크기 : capacity 스택의 최대 크기를 저장하는 정수 = len(stk) 스택 포인터 : ptr 스택에 ..
📌 검색 알고리즘이란? 📚 검색의 종류 배열 검색 (선형 검색) 연결 리스트 검색 이진 검색 트리 검색 📚 배열 검색 중에 배울 내용 선형 검색 : 무작위로 늘어놓은 데이터 집합에서 검색을 수행 이진 검색 : 일정한 규칙으로 늘어놓은 데이터 집합에서 아주 빠른 검색을 수행 해시법 : 추가·삭제가 자주 일어나는 데이터 집합에서 아주 빠른 검색을 수행 체인법 : 같은 해시값 데이터를 연결 리스트로 연결하는 방법 오픈 주소법 : 데이터를 위한 해시값이 충돌할 때 재해시하는 방법 📌 선형 검색 📚 선형 검색 (linear search) / 순차 검색 직선 모양(선형)으로 늘어선 배열에서 검색하는 경우 사용 원하는 키값을 가진 원소를 찾을 때까지 맨 앞부터 스캔하여 순서대로 검색하는 알고리즘 배열의 개수가 n이라..
I. 라우팅이란? 라우팅: 개념은 사용자가 요청한 URL에 따라 알맞은 페이지를 보여주는 것 블로그를 만든다고 가정한다면, 블로그 애플리케이션은 다음과 같은 페이지로 구성되어 있습니다. 글쓰기 페이지: 새로운 포스트를 작성하는 페이지 포스트 목록 페이지: 블로그에 작성된 여러 포스트의 목록을 보여주는 페이지 포스트 읽기 페이지: 하나의 포스트를 보여주는 페이지 이렇게 여러 페이지로 구성된 웹 애플리케이션을 만들 때 페이지별로 컴포넌트들을 분리해가면서 프로젝트를 관리하기 위해 필요한 것이 바로 라우팅 시스템입니다. 리액트에서 라우팅 시스템을 구축하기 위해 사용할 수 있는 선택지는 크게 두 가지가 있습니다. 리액트 라우터(React Router) : 리액트의 라우팅 관련 라이브러리 중 가장 오래되고 가장 많..
이 포스트는 [Do it! 자료 구조와 함께 배우는 알고리즘 입문 - 파이썬 편]을 보며 제가 알아야할 내용들을 정리한 포스트입니다. 개인 공부용이므로 자세한 설명이나 정보 설명을 위한 포스트는 아님을 미리 말씀드립니다. 📌 자료구조와 배열 📚 리스트의 기초 리스트의 원소를 변경할 수 있는 뮤터블(mutable) list 형 객체 파이썬 내장 함수인 list( )를 사용하여 다양한 자료형의 원소를 가진 객체 생성 가능 None을 통해 원솟값을 정하지 않은채로 개수 사용 가능 📚 튜플의 기초 튜플은 원소에 순서를 매겨 결합한 것으로 원소를 변경할 수 없는 이뮤터블(imutable) 자료형 tuple( ) 을 사용하면 문자열이나 리스트 등 여러가지 자료형 객체를 원소로 하는 튜플 생성 가능 📚 뮤터블과 이뮤..
지금까지의 저장소들은 사용자의 저장소에 저장했습니다. 이 저장소들을 인터넷 상에 저장할 수 있는데 이 서비스를 제공하는 것이 깃허브입니다. 깃허브에 버전을 올리면 지역 저장소의 버전을 백업할 수 있고, 온라인에 올릴 버전을 공유해 다른 사람들과 협엽할수도 있습니다. 📌 원격 저장소와 깃허브 📚 원격 저장소란 중요한 프로젝트를 저장하는 지역 저장소(local repository)가 개인 컴퓨터 오류로 삭제된다면 위험합니다. 깃에서 지역 저장소와 원격 저장소(remote repository)를 연결해서 버전 관리하는 파일을 쉽게 백업할 수 있습니다. 원격 저장소는 지역 저장소와 연결되어 있으면서 "백업"과 "협업"이 중요한 역할을 합니다. 깃에서 가장 많이 사용되는 원격 저장소는 깃허브입니다. 📚 깃허브로 ..
새로운 기능을 추가하기 위해서는 기존의 잘 작성된 코드는 그대로 두고 새 소스코드를 추가한 버전만 따로 관리해야합니다. 이럴 때 사용하는 것의 "브랜치(branch)" 라는 기능입니다. 📌 브랜치란? 📚 브랜치가 필요한 이유 프로그램을 만든 후 각 고객사 별로 각 상황에 맞는 프로그램을 변경할 수 있습니다. 이렇게 하기 위해 가장 쉬운 방법은 처음에 작업했던 저장소(그림의 master) 전체를 여러 개 복사해서 각 고객사의 이름을 붙인 저장소마다 버전 관리를 따로 하는 방법이 있습니다. 그러나 이렇게 관리하다보면 내용이 겹치는 것이 너무 많아 관리가 힘듭니다. 또한 같은 기능을 위해 다른 저장소의 코드를 그대로 가져왔을 때 문제가 발생할 수 있습니다. 이럴때 사용하는 것이 깃의 브랜치입니다. 📚 브랜치 ..
깃에서는 문서를 수정할 때마다 간단한 메모와 함께 수정 내용을 스냅숏으로 저장하는데 이것을 "버전"이라고 합니다. 깃의 가장 주요한 기능은 버전관리입니다. 문서를 수정하면서 수정 내용을 버전으로 저장하는 방법과, 저장한 버전을 사용해 이전 내용으로 되돌리는 방법을 알아봅시다. 이는 다음에 배울 백업과 협업 기능에도 중요한 내용입니다. 📌 깃 저장소 만들기 📚 깃 초기화 하기 - git init 깃 저장소를 만들고 그 디렉터리로 이동해서 깃을 초기화하면 그때부터 해당 디렉터리에 있는 파일의 버전을 관리할 수 있음 git init 명령을 통해 깃을 사용하도록 디렉터리가 초기화됨 git init 명령어를 입력하면 디렉터리에 .git 디렉터리가 생김, 이 디렉터리가 버전이 저장될 "저장소(repository)"..
지난 포스트에서 추가되는 데이터가 적어서 컴포넌트를 관리하는데 불편하지않았습니다. 그러나 데이터가 무수히 많아지면 애플리케이션이 느려지게 됩니다. 이때 사용되는 것이 컴포넌트 성능 최적화입니다. 실습은 다음과 같은 순서로 진행됩니다. 많은 데이터 렌더링하기 크롬 개발자 도구를 통한 성능 모니터링 React.memo를 통한 컴포넌트 리렌더링 성능 최적화 onToggle 과 onRemove 가 새로워지는 현상 방지하기 react-virtualized 를 사용한 렌더링 최적화 이번 실습을 위해서는 일정관리 웹서버가 필요합니다. https://daradarav.tistory.com/64 의 주소를 참고하여 실습을 진행한 후 이 포스트를 봐주시길 바랍니다. [React] 10. 일정 관리 웹 애플리케이션 만들기 ..